Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.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
Reactjs setInterval在Safari最新vesrion中渲染时每1秒响应更新自定义时钟_Reactjs_Safari - Fatal编程技术网

Reactjs setInterval在Safari最新vesrion中渲染时每1秒响应更新自定义时钟

Reactjs setInterval在Safari最新vesrion中渲染时每1秒响应更新自定义时钟,reactjs,safari,Reactjs,Safari,所以我在做一个固定开始时间的“timelapse”时钟。所以,它从8点开始到18点,然后重复。每4秒,1小时将过去。关于改进代码的任何其他建议也确实对我有帮助。先谢谢你 构造函数(道具){ 超级(道具); 此.state={ 分钟:0,, 秒:0,, 时间:8,, 领先0:0 }; } componentDidMount(){ this.timerClock=setInterval(()=>{ 如果(this.state.minute

所以我在做一个固定开始时间的“timelapse”时钟。所以,它从8点开始到18点,然后重复。每4秒,1小时将过去。关于改进代码的任何其他建议也确实对我有帮助。先谢谢你

构造函数(道具){
超级(道具);
此.state={
分钟:0,,
秒:0,,
时间:8,,
领先0:0
};
}
componentDidMount(){
this.timerClock=setInterval(()=>{
如果(this.state.minute<45&&this.state.hour=45&&this.state.hoursetInterval调用将把函数放入计时器的回调队列中,但不能保证精确地到达指定的间隔。

每个浏览器中的每个JS引擎实现在实现计时器的方式上都有所不同,但大多数浏览器可能会有某种计时器回调池,这意味着很难预测调用回调函数的期望间隔和实际间隔之间的确切变化

当降到几十毫秒级别时,分辨率会变差

所以,你真的不能依赖于这样一个事实,即间隔的总和将对应于期望的时间

关于你的渲染,这很奇怪。似乎你有两个渲染彼此重叠,但在你的代码中我找不到这方面的证据


如果您提供一个重现问题的工作片段,我可以更精确。

我确实有三个setInterval函数在三个组件中同时运行。第一个组件是具有1秒setInterval的时钟,第二个和第三个组件是具有4秒间隔的图像和图表。我也应该这样做为此使用recursion setTimeout?问题不是递归,这是一个重要的问题,您不能在一段时间内依赖N update。最好的方法是用您喜欢的时间触发函数,并根据当前日期()进行计算时间戳。这样做可以确保每次迭代都有正确的时间,即使迭代有隐式延迟。