在Redux状态缩减器中访问对象组件

时间:2020-07-11 09:42:52

标签: reactjs oop redux react-redux state

我刚刚开始学习redux,我想知道如何在redux reducers中访问对象组件。我想访问用户内部的address组件,但是由于它是关键而无法访问。有办法访问吗?这是我的代码:

const initialState = {
  token: localStorage.getItem('token'),
  user: {},
};

export default function (state = initialState, action) {
  const { type, payload } = action;
  case SET_SHIPPING_ADDRESS:
   return {
    ...state,
    state.user.addresses: payload, //how to access the addresses property from here?
   }
};

2 个答案:

答案 0 :(得分:1)

您在初始状态下拥有一个user属性,但是随后您尝试分配另一个属性state.user.buyer.addresses,这是错误的,因为您实际上想要做的是更新{ {1}}个对象。

深度克隆addresses对象的简便方法是先将其字符串化然后解析。

user

然后您可以分配新地址

user

最后使用新的const clone = JSON.parse(JSON.stringify(state.user)); 对象更新状态

clone.buyer.addresses = payload.addresses

答案 1 :(得分:1)

扩展操作“ ...”使您可以将新值分配给对象的属性。 如果其中一个属性是一个对象,而您想为其属性之一分配一个新值,则还需要对其进行扩展,依此类推。

例如:

export default function (state = initialState, action) {
  const { type, payload } = action;
  case SET_SHIPPING_ADDRESS:
   return {
    ...state, 
    user: { 
      ...state.user, 
       addresses: payload
    }
  }
};