redux的问题 如何优雅的返回reducer中新的state

在reducer中我们要用新的state来替换旧的state,现在有这样的state

state = {
    list:[
        {plan:'a',complate:false},
        {plan:'b',complate:true},
        {plan:'c',complate:false},
    ]
}

假如我也要把palne:'b'完成状态更改为false,除了用JSON.parse(JSON.stringify(state)) 去切断与原来state的联系还有什么更好的方法去返回新的state?

阅读 3k
3 个回答

可以使用lodash提供的方法set
set("list[1].complate", true, state)

这个表达的意思就说,会从state中找到list中下标为1的对象,去设置complate为true

不知道是谁教给你用JSON序列化的方式来阻断引用关系的, 你只需要使用ES5的map方法,
map方法会返回一个新数组, 而不会引用原先数组.

const list=[
  {plan:'a',complate:false},
  {plan:'b',complate:true},
  {plan:'c',complate:false},
]
const list2 = list.map(v => (v.plan === 'b' ? { ...v, complate: false } : v));

console.log(list === list2)  // false
新手上路,请多包涵

楼上的map方法数组里面对象没有克隆出来啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题