我有一个组件,在本地状态下有一组对象:
const [myState, setState] = useState<SomeObjectType[]>([]);
我可以通过复制整个数组来更新该数组中的单个对象,然后更新我希望更新的单个对象的属性:
OPTION 1
const state = [...myState];
state[id].description = description;
setState(state);
或者我可以使用 map :
OPTION 2
const newState = talkingPoints.map(el => {
// ????️ if id equals, update description property
if (el.id === id) {
return {...el, description};
}
// ????️ otherwise return as is
return el;
});
setData(newState);
或者我可以这样做(因为我100%确定数组中存在id)?
OPTION 3
const handleUpdate = () => {
setState(prevState => ({
...prevState,
prevState[id].description = description
}))
}
如果我不能100%确定我可以使用map并找到它:
OPTION 4
const handleUpdate = () => {
setState(prevState => ({
myState: prevState.myState.map(el => el.id === id ? { ...el, description } : el)
}))
}
推荐/最佳实践是什么?