React.js/Redux:Reducers 中的 setInterval 和 clearInterval
React.js/Redux: setInterval and clearInterval in Reducers
目前我正在研究 FCC Game of Life 并且我能够弄清楚如何生成下一个应用程序状态(增量)。
话虽这么说,我的下一步是弄清楚如何连续生成新的应用程序状态(生成)。在这种情况下,我试图在我的 reducer.
中实现 setInterval 和 clearInterval
我希望能够 start/pause 生成新一代(通过切换 state.start 中的状态)
我在实现它时遇到的困难是范围问题。
这是我的减速器的一部分:
reducers/reducers_grid.js
export default function(state = initialState, action){
switch (action.type) {
....
case START:
let toggleStart = state.start === true ? false : true;
if (state.start === true){
console.log('START THE GAME')
const newGeneration = nextGeneration(action.payload,state)
return Object.assign({}, state, {cells: newGeneration, start: toggleStart })
}
else {
console.log('PAUSE THE GAME')
return Object.assign({}, state, {start: toggleStart })
}
return state;
}
本质上,nextGeneration 函数 生成新的应用程序状态(生成)并将其更新为通过 Object.assign
起初,我想将 setInteveral 放在第一个 if 语句中,将 clearInterval 放在第二个 if 语句中,但显然这会创建范围问题。
这部分逻辑看起来很琐碎,但我一直卡在这上面。
不要在减速器中这样做。 Reducers 应该是纯函数(意味着没有副作用)。相反,您可以创建一个仅在游戏处于 运行 时呈现的组件(一个布尔状态,由 START
操作设置为 true
并由 STOP
行动)。然后在组件的 componentDidMount
函数调用 setInterval
中使用一个函数来调度 NEXT_GENERATION
操作。之后分派另一个将计时器 ID 添加到商店的操作。然后,在 componentWillUnmount
调用 clearInterval
时使用计时器 ID。
目前我正在研究 FCC Game of Life 并且我能够弄清楚如何生成下一个应用程序状态(增量)。
话虽这么说,我的下一步是弄清楚如何连续生成新的应用程序状态(生成)。在这种情况下,我试图在我的 reducer.
中实现 setInterval 和 clearInterval我希望能够 start/pause 生成新一代(通过切换 state.start 中的状态)
我在实现它时遇到的困难是范围问题。
这是我的减速器的一部分:
reducers/reducers_grid.js
export default function(state = initialState, action){
switch (action.type) {
....
case START:
let toggleStart = state.start === true ? false : true;
if (state.start === true){
console.log('START THE GAME')
const newGeneration = nextGeneration(action.payload,state)
return Object.assign({}, state, {cells: newGeneration, start: toggleStart })
}
else {
console.log('PAUSE THE GAME')
return Object.assign({}, state, {start: toggleStart })
}
return state;
}
本质上,nextGeneration 函数 生成新的应用程序状态(生成)并将其更新为通过 Object.assign
起初,我想将 setInteveral 放在第一个 if 语句中,将 clearInterval 放在第二个 if 语句中,但显然这会创建范围问题。
这部分逻辑看起来很琐碎,但我一直卡在这上面。
不要在减速器中这样做。 Reducers 应该是纯函数(意味着没有副作用)。相反,您可以创建一个仅在游戏处于 运行 时呈现的组件(一个布尔状态,由 START
操作设置为 true
并由 STOP
行动)。然后在组件的 componentDidMount
函数调用 setInterval
中使用一个函数来调度 NEXT_GENERATION
操作。之后分派另一个将计时器 ID 添加到商店的操作。然后,在 componentWillUnmount
调用 clearInterval
时使用计时器 ID。