Open jtwang7 opened 1 year ago
计时器我们可以用对应的注销方法来回收计时器的异步回调
useEffect(() => { const id = requestAnimationFrame(startAnimate1); const timerId = setTimeout(startAnimate2); const intervalId = setInterval(startAnimate3); return () => { cancelAnimationFrame(id); clearTimeout(timerId); clearInterval(intervalId); } }, []);
针对 Promise 这类没有原生回收方案的的异步操作,比较通用的方法是插桩回收
useEffect(() => { let canceled = false fetchData(pageIindex).then(resp => { if (canceled) { return; } // DO SOMETHING UI UPDATE }); return () => canceled = true; }, [pageIndex]);
上面的代码,定义了一个标志位(canceled),通过函数闭包在异步回调的时候,判断是否标志位已经过期(canceled = true),如果过期,不执行回调。
React 异步操作回收
计时器回收
计时器我们可以用对应的注销方法来回收计时器的异步回调
插桩回收
针对 Promise 这类没有原生回收方案的的异步操作,比较通用的方法是插桩回收
上面的代码,定义了一个标志位(canceled),通过函数闭包在异步回调的时候,判断是否标志位已经过期(canceled = true),如果过期,不执行回调。