如何解决ReactJS setInterval不会在Safari中重新渲染
const {useState,useCallback,useEffect} = React;
const Counter = ({isPlaying}) => {
const [seconds,setSeconds] = useState(5);
const [paused,setPaused] = useState(false);
const toggle = useCallback(() => {
setPaused(!paused);
},[paused,setPaused]);
useEffect(() => {
const interval = setInterval(() => {
if (isPlaying && seconds > 0 && !paused) {
setSeconds(seconds => seconds - 1);
console.log('bla');
}
},1000);
return () => clearInterval(interval);
},[seconds,isPlaying,paused]);
return (
<span className="count-down" id="count-down" onClick={toggle}>
<span>00</span>
<span>:</span>
<span>0<span id="sec-count">{seconds}</span></span>
</span>
);
}
ReactDOM.render(<Counter isPlaying={true}/>,document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
在功能组件中。
在Chrome和Firefox中可以正常工作。它从5倒数到0,并且您在控制台中看到“ bla” 5次。但是在Safari中,它不会重新渲染。它仅倒计时一次或两次,因此显示3或4,此后它将停止重新渲染。但是控制台仍然显示“ bla” 5次。
有什么主意,为什么即使间隔明显仍在运行,它仍在Safari中停止重新渲染?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。