Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何定期重新渲染react组件_Javascript_Reactjs_Typescript - Fatal编程技术网

Javascript 如何定期重新渲染react组件

Javascript 如何定期重新渲染react组件,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,出于某种原因,我将不在这里解释,我有一个react组件,每次完成渲染时都需要重新渲染该组件,而不超过最大渲染堆栈深度 我已尝试在我的useffect侦听器中设置一些状态,以强制组件重新渲染,但它一直超过最大堆栈大小 还有别的办法吗?我可能会这样做: const [time, setTime] = useState(Date.now()); useEffect(() => { let requestId; const update = () => {

出于某种原因,我将不在这里解释,我有一个react组件,每次完成渲染时都需要重新渲染该组件,而不超过最大渲染堆栈深度

我已尝试在我的
useffect
侦听器中设置一些状态,以强制组件重新渲染,但它一直超过最大堆栈大小


还有别的办法吗?

我可能会这样做:

const [time, setTime] = useState(Date.now());

useEffect(() => {
    let requestId;
    const update = () => {
        setTime(Date.now());
        requestId = window.requestAnimationFrame(update);
    }
    update();
    return () => {
        window.cancelAnimationFrame(requestID);
    };
}, []);
这样,每次浏览器准备重新绘制时,您都会触发更新(因此不是“立即”进行,而是感觉像是这样)。它不会产生一个巨大的堆栈


作为旁注,您不想在[]内传递任何内容。如果您在括号中传递
时间
,则意味着每次时间值发生变化时都运行效果,也就是说,这不是我们想要的。它已经是一个“循环”,所以我们只需要在装载时运行一次,然后在卸载组件时清除更新循环。

这听起来像是性能噩梦,可能是错误的解决方案