我试图弄清楚我是否在我的减速机中使用了地图。
这是上下文。
我有一个由......组成的redux状态。
friends [{}, {}]
pets [{}, {}]
users [{}, {}]
其中3个是基于GET响应的对象数组(本地API)
以下是friends数组的一个对象的示例。
{
id: '982347646324',
name: 'Peter',
lastName: 'Doe',
age: 40
}
所以......现在让我们说我要编辑这个条目。
我目前的减速机案例是......
...
case EDIT_FRIEND:
return state.map(el => {
if (el.id === action.payload.data.id) {
return {
...el,
name: action.payload.data.name,
lastName: action.payload.data.lastName,
age: action.payload.data.age
}
}
return el
});
...
default:
return state;
由于我是新手并且在学习过程中,我应该问: 这是正确的做法......? 它是有效的,是的,但我想学习并正确地做到这一点。
我应该以其他方式这样做吗? 我应该映射还是不映射......?任何帮助都会非常有帮助。
很多人
答案 0 :(得分:1)
有几种方法可以做到,你使用的map方法就是这样,使用它完全没问题。另一个解决方案是使用spread syntax
并更新所需的对象,如
...
case EDIT_FRIEND: {
const index = state.findIndex(obj => obj.id === action.payload.data.id);
return [
...state.slice(0, index),
{
...state[index],
name: action.payload.data.name,
lastName: action.payload.data.lastName,
age: action.payload.data.age
}
...state.slice(index + 1)
]
}
...
default:
return state;
您可以选择使用上述两种解决方案中的任何一种解决方案。你必须记住的是,你并没有直接改变商店状态。
答案 1 :(得分:0)
你不应该在减速机中做的事情
由于您使用的是map方法,因此每次都会返回一个新数组并且不会改变您之前的数组。所以,使用map完全没问题。