reactjs – React.js / Redux:Reducers中的setInterval和clearInterval

目前我正在 FCC Game of Life工作,我能够弄清楚如何生成一个应用程序状态(递增).

话虽这么说,我的下一步是弄清楚如何连续生成新的应用程序状态(生成).在这种情况下,我试图在我的reducer中实现setInterval和clearInterval.

我希望能够启动/暂停生成新一代(通过在state.start中切换状态)

我实现它的麻烦是范围问题.

这是我的减速机的一部分:

减速器/ 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({},{start: toggleStart })
      }

  return state;
}

从本质上讲,nextGeneration函数生成新的应用程序状态(生成)并通过Object.assign将其更新

首先,我想将setInteveral放在第一个if语句中,将clearInterval放在第二个if语句中,但显然会产生范围问题.

这部分逻辑似乎非常微不足道,但我一直坚持这一点.

不要在减速机中这样做.减速器应该是纯函数(意味着没有副作用).相反,您可以创建仅在游戏运行时呈现的组件(由START操作设置为true且由STOP操作设置为false的布尔状态).然后在组件的componentDidMount函数调用setInterval,该函数调用NEXT_GENERATION操作.之后,发送另一个动作,将计时器ID添加到商店.然后,在componentwillUnmount中根据计时器id删除间隔.

相关文章

一、前言 在组件方面react和Vue一样的,核心思想玩的就是组件...
前言: 前段时间学习完react后,刚好就接到公司一个react项目...
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技...
react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...