【发布时间】:2016-04-07 13:34:26
【问题描述】:
我知道我不应该改变输入并且应该克隆对象来改变它。我遵循了 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()
})
但这会改变输入状态对象 - 即使我返回一个新对象,这是否被禁止?
【问题讨论】:
-
快速提问。 Splice 返回您删除的项目。这是你的意图吗?如果不是,你应该使用切片,它也遵守无突变法则。
-
好吧,在这个例子中,我将数组的两个部分拼接成一个新数组——我想删除的项目被遗漏了。 Slice 也返回删除的项目,对吗?只有它在不改变原始数组的情况下这样做,这样会是更好的方法吗?
-
@AR7 根据您的建议:
items: [...state.items.slice(0, action.payload.value), ...state.items.slice(action.payload.value + 1 )]现在使用 slice 而不是 splice 以免改变输入 - 这是要走的路还是有更简洁的方法?
标签: javascript reactjs redux