标签: react-concurrent

在 useRef() 中存储回调

下面是一个可变 ref 的示例,该示例存储来自Overreacted 博客的当前回调:

function useInterval(callback, delay) {
  const savedCallback = useRef();

  // update ref before 2nd effect
  useEffect(() => {
    savedCallback.current = callback; // save the callback in a mutable ref
  });

  useEffect(() => {
    function tick() {
      // can always access the most recent callback value without callback dep 
      savedCallback.current(); 
    }

    let id = setInterval(tick, delay);
    return () => clearInterval(id);
  }, [delay]);
}
Run Code Online (Sandbox Code Playgroud)

然而,React Hook FAQ 指出不推荐使用该模式:

另请注意,此模式可能会导致并发模式出现问题。[...]

在任何一种情况下,我们都不推荐这种模式,只是为了完整起见在这里展示它。

我发现这种模式对于回调非常有用,但我不明白为什么它会在 FAQ 中出现危险信号。例如,客户端组件可以使用 …

javascript reactjs react-ref react-hooks react-concurrent

14
推荐指数
1
解决办法
1194
查看次数