javascript - React/Redux - 在渲染之前调整状态是否安全

标签 javascript reactjs redux react-redux

I'm making Tetris in React/Redux, using Brandly's non-redux version for reference/tips and pulling some utilities.

假设我有一个商店(游戏板),由二维数组表示。这些值要么是 false,要么是该作品的类名称(用于着色)。

此外,还有第二个存储,代表下一个要播放的轨道(并包括正在播放但尚未设置的当前轨道)。

在负责渲染的板组件内部,商店按如下方式附加到 Prop :

const mapStateToProps = (state) => {
  return {
    Board: state.Board,
    PieceList: state.PieceList
  }
}

我的渲染函数如下所示:

  render() {
    var piece = this.props.PieceList.currentPiece;
    var newBoard = _.cloneDeep(this.props.Board);
    pieceSetter(newBoard)(piece._piece.blocks[piece._rotation], piece._position, piece._piece.className);
    return (
      <div className="board">
        {newBoard.map((x, i) =>
          <Row value={x} key={i}/>
        )}
      </div>
    )
  }

其中pieceSetter是一个向棋盘添加棋子的实用函数。

渲染方法是否适合进行一些数据按摩来组合信息?在这个特定的实例中,它将“当前棋子”添加到棋盘上进行显示。

我想避免将当前 block 添加到板的存储中,因为当前处理移动验证功能的方式(板当前忽略用于移动验证的“当前” block 并考虑该 block 将在哪里,没有“未放置的棋子”的概念)

我是否在创建反模式,或者这可以被认为是合适的吗?

最佳答案

最好将这种逻辑放在渲染函数之外。例如,您可以将该代码放置在 mapStateToProps 中,并 trim render 函数仅用于演示

此外,无需使用_.cloneDeep复制Board对象;渲染链中的 React 组件和容器不会改变存储中对象的状态。

关于javascript - React/Redux - 在渲染之前调整状态是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43901088/

相关文章:

javascript - Redux-saga put方法不触发reducer

javascript - 如何访问使用 vee-validate 验证的自定义输入组件上的错误计算属性?

javascript - 为什么我在 querySelectorAll 上收到错误 TS2339,因为复选框属性 'checked' 不存在

javascript - 使用 Jest 进行 React 测试 : Destructuring assignment not working

javascript - 如何为 html 组件的 onClick 处理程序提供 React 方法?

reactjs - 返回 reducer 结果集合的 reducer

javascript - 我可以在 chrome 开发工具中模拟我的请求响应吗?

javascript - Facebook Request 2.0 apprequests 和 exclude_ids

JavaScript HTML 和 PHP 弹出窗口

javascript - 在 Redux 应用程序中写入 localStorage 的位置?