繁体   English   中英

useEffect 运行一次钩子

[英]useEffect run once hook

我找到了这个库https://react-hooks.org/docs/useeffectoncewhen但我很困惑。 为什么它甚至存在以及它的使用目的是什么? 难道我不能使用 useEffect 来达到同样的目的吗?

useEffect(() => {
    setTimeout(() => {
      setLoading(false);
    }, 3000); // Countdown for 3 sec
  }, [])

可以useEffect做同样的事情:

“如果你想运行一个效果并且只清理一次(在挂载和卸载时),你可以传递一个空数组 ([]) 作为第二个参数”

文档

您还可以提供一个依赖项列表,如果它们发生变化,这些依赖项会再次触发效果运行。

useEffect( () => { doSomething() } , [ifThisChangesRunFuncAgain, orThis, ...] )

钩子是useEffectOnceWhen ,而不仅仅是useEffectOnce 根据您链接的来源:

当条件为真时,最多运行一次回调效果

这是该钩子的源代码

/**
 * useEffectOnceWhen hook
 *
 * It fires a callback once when a condition is true or become true.
 * Fires the callback at most one time.
 *
 * @param callback The callback to fire
 * @param when The condition which needs to be true
 */
function useEffectOnceWhen(callback: () => void, when: boolean = true): void {
  const hasRunOnceRef = useRef(false);
  const callbackRef = useRef(callback);
  useEffect(() => {
    callbackRef.current = callback;
  });
  useEffect(() => {
    if (when && !hasRunOnceRef.current) {
      callbackRef.current();
      hasRunOnceRef.current = true;
    }
  }, [when]);
}

正如你所看到的,它做了一些比在钩子开始时调用一次更高级的事情:一旦传入的条件第一次变为真,它就会被调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM