gpt4 book ai didi

javascript - 这是使用 redux 删除项目的正确方法吗?

转载 作者:IT王子 更新时间:2023-10-29 02:43:44 26 4
gpt4 key购买 nike

我知道我不应该改变输入,应该克隆对象来改变它。我遵循的是 redux 入门项目中使用的约定:

ADD_ITEM: (state, action) => ({
...state,
items: [...state.items, action.payload.value],
lastUpdated: action.payload.date
})

用于添加项目 - 我使用 spread 将项目追加到数组中。

为了删除我使用了:

DELETE_ITEM: (state, action) => ({
...state,
items: [...state.items.splice(0, action.payload), ...state.items.splice(1)],
lastUpdated: Date.now()
})

但这是在改变输入状态对象——即使我返回一个新对象,这是否被禁止?

最佳答案

没有。永远不要改变你的状态。

即使您返回一个新对象,您仍然会污染旧对象,这是您永远不想做的。这使得在旧状态和新状态之间进行比较时出现问题。例如在 shouldComponentUpdate 中,react-redux 在底层使用。它还使时间旅行变得不可能(即撤消和重做)。

相反,使用不可变方法。始终使用 Array#slice 而永远不要使用 Array#splice

我从你的代码中假设 action.payload 是被删除项目的索引。更好的方法如下:

items: [
...state.items.slice(0, action.payload),
...state.items.slice(action.payload + 1)
],

关于javascript - 这是使用 redux 删除项目的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com