如何仅更新部分状态

时间:2019-11-05 20:39:50

标签: javascript reactjs redux

这里是State对象:

const initialState = {
  data: {
    user: '',
    token: '',
  }
}

减速器:

case 'DO_SOMETHING':
return {...state, data: action.payload }

如果我如上所述软拷贝状态,我将覆盖状态的整个data部分。如何在不覆盖token的情况下仅更新具有给定有效负载的用户?

3 个答案:

答案 0 :(得分:4)

如果有效负载只是user,则只需使用与state对象相同的解构模式即可:

return {
  ...state,
  data: {
    ...state.data,
    user: action.payload
  }
}

此模式可以根据需要嵌套,因此您可以拥有大型结构化状态对象,并且只需在有效负载中传递所需的字段即可。

答案 1 :(得分:3)

尝试一下,(考虑到action.payload是整个数据对象)

case 'DO_SOMETHING':
return {...state, data: { ...state.data, user: action.payload.user } }

答案 2 :(得分:2)

也传播嵌套对象:

return {...state, data: {...state.data, user: action.payload} }