繁体   English   中英

Redux:这算作变异状态吗?

[英]Redux: Does this count as mutating state?

在Angular2(NgRedux)中使用Redux更新/设置订单条目。 可以先更改代理变量,然后对object.assign进行声明,这样行吗?

在我的数据缩减器中:

case DataActions.UPDATE_ORDER:
  var updatedItem
  var updatedState = state.orders
  for(var i = 0; i < state.orders.length; ++i) {
    if(state.orders[i]['key'] === action.payload.key) {
      updatedItem = state.orders[i]
      updatedItem.name = action.payload.name
      updatedItem.items = action.payload.items
    }
  }
  updatedState[i] = updatedItem
  return Object.assign({}, state, {
    orders: updatedState
  })

您的“代理变量”只是另一个引用同一个对象,所以是的,你直接突变所数组中的项目。

为了正确地进行不可变的更新,应复制每个嵌套级别。 Redux文档在不可变更新模式中提供了两个常见错误以及如何正确执行此操作的示例。

非常感谢@markerikson提供的解决方案。

我接受了文档的建议,并使用了dotProp库。 这工作:

npm install dot-prop-immutable
...
var dotProp = require('dot-prop-immutable');
...
case DataActions.UPDATE_ORDER:
  for(var i = 0; i < state.orders.length; ++i) {
    if(state.orders[i]['key'] === action.payload.key) {
      state = dotProp.set(state, `orders.${i}.name`, action.payload.name)
      state = dotProp.set(state, `orders.${i}.items`, action.payload.items)
    }
  }
  return state

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM