[英]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.