Javascript ReactJS-“反应”;“设置状态”;使用react钩子,不会合并状态,而是替换状态
我有以下一段逻辑,关于带有Javascript ReactJS-“反应”;“设置状态”;使用react钩子,不会合并状态,而是替换状态,javascript,reactjs,typescript,use-state,Javascript,Reactjs,Typescript,Use State,我有以下一段逻辑,关于带有useState的状态和Websocket端点流数据 const [state, setState] = React.useState({ items: [], activity: [] }); React.useEffect(() => { const currentItems = R.isNil(data.items) ? [] : data.items; const currentActivity = R.isNil(data.ac
useState
的状态和Websocket端点流数据
const [state, setState] = React.useState({ items: [], activity: [] });
React.useEffect(() => {
const currentItems = R.isNil(data.items) ? [] : data.items;
const currentActivity = R.isNil(data.activity) ? [] : data.activity;
setState({
...state,
items: Array.from(new Set([...state.items, ...currentItems])),
activity: Array.from(new Set([...state.activity, ...currentActivity]))
});
}, [data]);
console.log('State:', state); // This just replaces the state instead of merging.
但我不能让州合并。它只是每次用流中的新值替换状态。我错过了什么。我没怎么用钩子,但看起来很奇怪<代码>我正在传播状态,然后更新每个值。您能告诉我我做错了什么吗?您可以使用useState hook中的回调函数来执行此操作:
setState(prev =>{
...prev,
items: Array.from(new Set([...prev.items, ...currentItems])),
activity: Array.from(new Set([...prev.activity, ...currentActivity]))
});
可以使用useState钩子中的回调函数执行此操作:
setState(prev =>{
...prev,
items: Array.from(new Set([...prev.items, ...currentItems])),
activity: Array.from(new Set([...prev.activity, ...currentActivity]))
});
“替换”到底是什么意思?如果你的意思是它们不是同一个物体,那是正常的。合并的状态应该是一个全新的对象,而不是具有突变的原始对象。也许从控制台添加日志?您所说的“替换”到底是什么意思?如果你的意思是它们不是同一个物体,那是正常的。合并的状态应该是一个全新的对象,而不是具有突变的原始对象。也许可以从控制台添加日志?