我有三个不同的reducer做不同的事情,但最后它们都改变了传递给它们的slice对象中的一个属性。常见的部分是通过删除数组中的属性和引用来取消元素的注册。
我想知道最好的做法是将重复的代码提取到一个单独的方法中。我可以将它提取到一个辅助函数,但为此我想创建一个切片的副本,而不是直接改变它,我不拥有这个项目,所以我现在没有lodash可用,所以这是另一个障碍。
第二个选择是保留重复的代码,这违背了DRY原则。第三,我还可以在同一个文件中创建一个函数来完成这项工作,这与在helper中完成这项工作没有太大的区别。
这里的最佳实践是什么?我真的不认为保持重复的代码是一个好主意,但我也不想创建一个函数,改变其中的切片。然而,我现在没有lodash可用于深度拷贝,所以我想知道我能在这里做什么。
你绝对可以提取可以在reducer中调用的helper方法。
假设您正在使用Redux Toolkit和createSlice
,您可以将这些辅助函数写成"突变"。更新逻辑,只要在createSlice
内部调用它们,这样使用它们是安全的,例如:
function addSomeItem(state, item) {
state.items.push(item);
}
// later
createSlice({
name: "fruits",
initialState: {items: []},
reducers: {
fruitAdded(state, action) {
addSomeItem(state, action.payload);
}
}
})