2

我在我的功能组件中使用以下代码。我希望这个组件只在更改时重新渲染game._id。但是 React 不断给我警告:

React Hook useEffect 缺少依赖项:'game'。包括它或删除依赖数组

这是一种危险的做法,还是如果我明确希望它依赖于给定的属性是否合理?

  const [game, setGame] = useState({});

  useEffect(() => {
    return () => {
      if (game._id !== undefined) {
       // Do stuff with game
      }
    };
  }, [socket, user, game._id]);

我不想将游戏用作依赖项,因为这会使我的组件重新渲染很多。

4

1 回答 1

0

依赖数组检查自上次渲染后值是否更改。它不关心价值来自哪里,或者它的形状。问题在于 linter,它看到了gameinside的使用useEffect,尽管它没有注册为依赖项。声明gameId并为其分配 的值game._id,并将其用作依赖项,并在内部useEffect

const [game, setGame] = useState({});

const gameId = game._id;

useEffect(() => {
  return () => {
    // use gameId inside useEffect
    if (gameId !== undefined) {
      // Do stuff with game
    }
  };
}, [socket, user, gameId]); // set gameId as dependency
于 2021-06-12T18:43:29.760 回答