簡體   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