【问题标题】:useEffect has missing dependency leads to another erroruseEffect 缺少依赖项导致另一个错误
【发布时间】:2021-05-14 04:48:18
【问题描述】:

以下代码给出“useEffect has a missing dependency”错误:

  useEffect(() => {
    inputToOutput();
  }, [sortalphaStatus, sorttypeStatus]);

所以我把它改成这样:

  useEffect(() => {
    inputToOutput();
  }, [sortalphaStatus, sorttypeStatus, inputToOutput]);

但是现在我收到了这个错误:“'inputToOutput' 函数使 useEffect Hook(在第 363 行)的依赖关系在每次渲染时都会发生变化。要解决这个问题,请将 'inputToOutput' 的定义包装在它自己的 useCallback() Hook 中"

我的函数被调用的格式如下:

   const inputToOutput = e => {
    inputTextTmp = inputText;
    blah blah;
   };

我不知道该怎么办。我想在我的功能组件中设置状态时使用回调函数,但知道这是不可能的,所以我使用了一个 useEffect 钩子。但是现在我遇到了这些我无法克服的错误。

有什么建议吗?

【问题讨论】:

标签: reactjs


【解决方案1】:

将你的函数包裹在useCallback()钩子中:

const inputToOutput = useCallback((e) => {
    inputTextTmp = inputText;
    blah blah;
}, []);

 useEffect(() => {
    inputToOutput();
 }, [sortalphaStatus, sorttypeStatus, inputToOutput]);

【讨论】:

    【解决方案2】:

    第一个警告是因为如果你在 useEffect 中调用一个函数,通常你会想在它更新时调用 useEffect。 现在,第二个警告是因为每次您的组件呈现函数时都会返回一个不同的函数对象,然后每次都会触发您的 useEffect(当它注意到其中一个依赖项发生更改时触发了 useEffect),因此为避免您需要包装你的函数与 useCallback 所以函数将是相同的。

    【讨论】:

      【解决方案3】:

      它告诉你像这样包装你的inputToOutput :-

       const inputToOutput = useCallBack((e) => {
          inputTextTmp = inputText;
          blah blah;
         },[]);
      

      现在[] 可能具有目前我无法从所述代码中推断出的依赖项。

      它告诉你这样做的原因是因为在每次渲染中都会创建一个新的 inputToOutput 函数,即完全是一个新对象,如果将其作为依赖项传递给 useEffect 将再次导致渲染,这将再次创建一个新的函数等等.....on

      【讨论】:

      • 我已经添加了 useCallBack 但现在我收到另一个错误:“每次渲染后,React Hook useCallback 内部对 'inputTextTmp' 变量的分配将丢失。要随着时间的推移保留该值,请将其存储起来在 useRef Hook 中并将可变值保留在 '.current' 属性中。否则,您可以直接在 useCallback 中移动此变量。整个问题源于我想设置两个状态变量,然后运行一个依赖于这些状态变量的函数。但是我读到的东西说我需要useEffect。还有其他方法吗?
      • 我要把 inputTextTmp 作为一个状态并测试它。
      猜你喜欢
      • 1970-01-01
      • 2020-03-24
      • 2021-02-23
      • 2021-08-19
      • 2020-01-06
      • 1970-01-01
      • 2020-10-26
      相关资源
      最近更新 更多