【问题标题】:how to extract payload from action directly in the returned object如何在返回的对象中直接从动作中提取有效负载
【发布时间】:2018-10-17 19:13:39
【问题描述】:

我正在使用Redux。在下面的减速器中,如果我使用,我会收到错误:

return({...state, action.payload});

改为:

const add= (stateaction) => {
  switch (action.type) {       
    case "ADD":
    const {payload} = action;///  <=
    return({...state, payload}); // <= instead of thes two lines
    default:
      return state;
  }
};

我记得我们可以通过添加括号来做到这一点,例如:

return({...state, [action.payload]});

但无法做到。

【问题讨论】:

  • 发布您遇到的错误
  • 如果你的payload也是一个对象,你需要像传播之前的状态一样传播它的内容:return ({ ...state, ...payload });。否则,ES6 速记将在结果对象中创建一个名为 payload 的键

标签: reactjs ecmascript-6 redux


【解决方案1】:

如果你需要你所在州的payload内容,你也可以传播它:

const add = (state, action) => {
  switch (action.type) {       
    case "ADD":
      return {...state, ...action.payload };
    default:
      return state;
  }
};

如果状态是一个数组,你可以使用array spread向它添加项目:

const add = (state, action) => {
  switch (action.type) {       
    case "ADD":
      return [...state, action.payload];
    default:
      return state;
  }
};

【讨论】:

  • 我需要action.payload...action.payload' doesn't work, i am 100% sure there was a trick to inject it directly into the object via adding brackets []`
  • 您需要负载内容还是属性负载?最终结果应该是什么(状态对象)?
  • 我知道如何让它发挥作用,我的问题是关于 [] 的那个技巧,我需要记住这一点
  • 您将给出一个带有真实有效负载的已调度操作的示例,以及应该从减速器返回的结束状态,然后我将向您展示使用括号的技巧。成交?
  • reducer 的返回是[{name: "blabla", address: "asdsad", rate: 0, lld: ""} {name: "kilkeni", address: "close to me :)", rate: 4.5, lld: ""}] paylaod 是:{name: "kilkeni", address: "close to me :)", rate: 4.5, lld: ""}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2020-09-27
  • 1970-01-01
相关资源
最近更新 更多