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
}
}

答案 0 :(得分:1)
首先,redux
严重依赖于state
是不可变的。您不应该修改它,而是返回它的新修改副本。
一种选择是自己做(ES的传播操作员通常对此非常有帮助)。
另一种选择是使用immutability-helper。语法可能很难在开头获得,但对于更复杂的状态,它可以帮助您获得更好的结构。