我的 React 游戏有一个<Clock/>组件来跟踪时间。
当游戏暂停时,计时器应该停止。
我正在使用 Redux 来管理播放/暂停状态以及经过的时间。
const initialState = { inProgress: false, timeElapsed: 0 }
inProgress状态由另一个组件上的按钮处理,该按钮分派一个操作来更新商店(仅针对值inProgress)。
该组件在其钩子中<Clock/>递增。然而并不清楚。timeElapseduseEffectsetInterval
import React from 'react';
import { connect } from 'react-redux';
const Clock = ({ dispatch, inProgress, ticksElapsed }) => {
React.useEffect(() => {
const progressTimer = setInterval(function(){
inProgress ? dispatch({ type: "CLOCK_RUN" }) : clearInterval(progressTimer);
}, 1000)
}, [inProgress]);
return (
<></>
)
};
let mapStateToProps = ( state ) => {
let { inProgress, ticksElapsed } = state.gameState;
return { inProgress, ticksElapsed };
}
export default connect(
mapStateToProps,
null,
)(Clock);
在里面setInterval,什么时候inProgress,false我希望clearInterval(progressTimer)时钟停止。
此外,还有另一个问题,即省略[inProgress]in useEffecthook 会导致计时器以荒谬的速度增加,从而导致应用程序崩溃。
谢谢你。