为什么Redux reducer中的.filter不修改中的状态,而.push修改?

fbcarpbf  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(156)

在我的课上,我学到了Redux中的reducer不允许直接修改原始状态的规则,然后提供了两个示例。第一个示例使用.filter方法返回更改后的状态,而第二个示例使用.push方法返回更改后的状态。我的消息来源说,第一个例子遵循这些规则,即不允许归约器直接修改原始状态,而第二个打破了这一点我不明白为什么第一个例子中的“case 'songs/removeSong'“行可以过滤state数组,而第二个例子中使用.push方法的“case 'songs/addGlobalSong'“违反了这个规则:
(第一个示例)

const reducer = (state = initialState, action) => {
switch(action.type){
case 'songs/addSong': {
return [...state, action.payload]
}
case 'songs/removeSong': {
return state.filter(song => song !== action.payload)
}
default:
return state;
}
}

(第二个示例)

const playlistReducer = (state = [], action) => {
switch (action.type) {
case 'songs/addGlobalSong': {
state.push(action.payload)
return state
}
default:
return state;
}
}

我知道我们应该在return语句中使用spread操作符,以免影响原始数组(如return [... state,action.payload]),我只是不明白为什么.filter方法不被认为会影响原始数组,而.push方法被认为会影响原始数组。任何帮助都将非常感谢。谢谢!

4szc88ey

4szc88ey1#

Filter根据给定条件返回原始数组的子集,而push方法对调用它的数组进行更改。

相关问题