javascript 试图分配给只读属性

qgzx9mmu  于 2022-12-21  发布在  Java
关注(0)|答案(1)|浏览(241)

首先,我得到我的redux数组,然后在my_function中将其复制到新变量中,如下所示:
第一个月
let new_transactions_list = [...transactions_list];
当我想改变我的new_transactions_list很深我得到了错误

const my_function = () => {

let new_transactions_list = [...transactions_list];
new_transactions_list[yearIndex].data_yearly[monthIndex].data_monthly.push(new_obj);
}

但是当我在class中定义一个数组时(没有redux),它就是work

h79rfbju

h79rfbju1#

即使使用扩展的[...transactions_list],也只是复制了数组的第一层,这意味着该数组下面的对象仍然是redux使用的对象。
您有两个选项:
这是redux建议您更新嵌套对象链接的方式

function updateVeryNestedField(state, action) {
  return {
    ...state,
    first: {
      ...state.first,
      second: {
        ...state.first.second,
        [action.someId]: {
          ...state.first.second[action.someId],
          fourth: action.someValue
        }
      }
    }
  }
}

或者,您可以使用类似immer这样的函数,它允许您更新对象,即使对象是这样的不可变对象

const nextState = produce(baseState, draft => {
    draft[1].done = true
    draft.push({title: "Tweet about it"})
})

无论采用哪种方式,您都必须在以后更新redux状态,因为这种更改将仅在代码中是本地的,而不是全局redux。

相关问题