如何更好地合并状态变化?

时间:2017-09-14 12:09:06

标签: javascript redux

updateUiActive和updateData都返回新的状态副本。

我正在使用updateData(updateUiActive(state, action), action)返回新版本的州,其中首先包含使用updateUiActive更新的属性以及更新后的属性。

我想知道是否有更优雅和有效的方法。 也许用JS携带?



const updateUiActive = (state, action) => {
  return dotProp.set(state, 'navigation.ui.active', action.payload)
}

const updateData = (state, action) => {
  const updatedData = state.navigation.data.map((x) => {
    x.isActive = x.id === action.payload
    return x
  })
  return dotProp.set(state, 'navigation.data', updatedData)
}

function navigationReducer (state = initialState, action) {
  switch (action.type) {
    case types.SET_ACTIVE:
      return updateData(updateUiActive(state, action), action)
    default:
      return state
  }
}




1 个答案:

答案 0 :(得分:1)

首先,redux严重依赖于state是不可变的。您不应该修改它,而是返回它的新修改副本。

一种选择是自己做(ES的传播操作员通常对此非常有帮助)。

另一种选择是使用immutability-helper。语法可能很难在开头获得,但对于更复杂的状态,它可以帮助您获得更好的结构。