javascript - 关于使用 useReducer 更新状态的问题
问题描述
我有点不清楚 React 如何使用 useReducer 处理更新状态。
我有这些代码如下:
function userSelectionsReducer(state, action) {
switch (action.type) {
case 'editQtt':
state[action.data.index].quantity = action.data.value;
return state;
break;
case 'editDate':
return state.map((item, index) =>
index == action.data.index ?
{ ...item, deliveryDate: action.data.value} :
item
);
break;
}
}
const [userSelections, dispatchUserSelection] = useReducer(userSelectionsReducer, {});
useEffect(() => {
console.log(userSelections) //will reach here with 'editDate' but not 'editQtt'
}, [userSelections])
const logState = () => {
console.log(userSelections) //will log new value of 'state' after dispatching 'editQtt'
}
....
<button onClick={logState}>Log selections</button>
如您所见,我编写的第一个操作是直接更新“状态”值,而在另一个操作中,我返回一个具有更新值的新状态实例。据我所知(不太确定),“状态”是不可变的,无法直接更改,但正如我在第一个操作中观察到的那样,“状态”值实际上已更改,但不会触发组件的重新渲染,也不会触发调用useEffect的回调函数。但是当我使用专用按钮手动记录它时,它会显示更新的值。你们知道它是如何工作的吗?谢谢!
解决方案
推荐阅读
- fastreport - Fastreport 在 Getit Delphi 中不起作用
- r - 使用一个数据帧中的系数(斜率和截距)来计算第二个数据帧中的值列表
- javascript - 使用 JSON 数据迭代表
- node.js - 如何使用 EJS 链接 Express 中公共目录以外的文件?
- python - 合并字典
- laravel - Laravel - 无法在谷歌云上运行迁移
- wpf - 智能感知 wpf 中未显示的资源
- java - Android Material CalendarView 选定日期背景半径
- javascript - 从事件获取文件时,打字稿对象可能为空
- c# - 如何删除单词中的空格?(itextSharp, PdfReader, C#, ASP.NET)