Add isMounted check
This commit is contained in:
parent
3e447dc942
commit
1d11e98fc3
1 changed files with 19 additions and 0 deletions
|
|
@ -5,6 +5,20 @@ import styles from "./GridDemo.module.css";
|
||||||
import useMeasure from "react-use-measure";
|
import useMeasure from "react-use-measure";
|
||||||
import moveArrItem from "lodash-move";
|
import moveArrItem from "lodash-move";
|
||||||
|
|
||||||
|
function useIsMounted() {
|
||||||
|
const isMountedRef = useRef(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
isMountedRef.current = true;
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
isMountedRef.current = false;
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return isMountedRef;
|
||||||
|
}
|
||||||
|
|
||||||
function isInside([x, y], targetTile) {
|
function isInside([x, y], targetTile) {
|
||||||
const left = targetTile.x;
|
const left = targetTile.x;
|
||||||
const top = targetTile.y;
|
const top = targetTile.y;
|
||||||
|
|
@ -113,6 +127,7 @@ export function VideoGrid({ participants }) {
|
||||||
tilePositions: [],
|
tilePositions: [],
|
||||||
});
|
});
|
||||||
const draggingTileRef = useRef(null);
|
const draggingTileRef = useRef(null);
|
||||||
|
const isMounted = useIsMounted();
|
||||||
|
|
||||||
// Contains tile indices
|
// Contains tile indices
|
||||||
// Tiles are displayed in the order that they appear
|
// Tiles are displayed in the order that they appear
|
||||||
|
|
@ -166,6 +181,10 @@ export function VideoGrid({ participants }) {
|
||||||
if (removedTileKeys.length > 0) {
|
if (removedTileKeys.length > 0) {
|
||||||
// TODO: There's a race condition in this nested set state when you quickly add/remove
|
// TODO: There's a race condition in this nested set state when you quickly add/remove
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
if (!isMounted.current) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setTileState(({ tiles }) => {
|
setTileState(({ tiles }) => {
|
||||||
const newTiles = tiles.filter(
|
const newTiles = tiles.filter(
|
||||||
(tile) => !removedTileKeys.includes(tile.key)
|
(tile) => !removedTileKeys.includes(tile.key)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue