如何解决即使我没有改变状态,useReducer 操作也不会在状态更改后重新呈现
我有一个“读者”(对象)数组,每个读者都有一个布尔类型的 .ToString()
属性。我创建了一个重置按钮,为每个读者设置 [pscustomobject]
。这是我的减速器:
done
按钮只是发送动作:
reader.done = false
虽然读者由一个列表组件表示,该组件只是将所有读者映射到此 export const ReadersReducer = (state,action) => {
switch (action.type) {
case "RESET_DONE":
return state.map((reader) => {
reader.done = false;
return reader;
});
default:
return state;
}
};
:
<button onClick={() => dispatch({type: "RESET_DONE"})}>reset</button>
当我单击重置按钮时,它实际上执行了它应该执行的操作(因为它使用上下文提供程序组件中的 useEffect 更新后端),但复选框保持选中状态。为什么?
解决方法
问题是您的减速器返回相同的 reader
对象,因此传递到组件中的 reader
道具似乎(对 React 而言)没有改变。您可以按如下方式解决此问题:
export const ReadersReducer = (state,action) => {
switch (action.type) {
case "RESET_DONE":
return state.map((reader) => {
return {...reader,done: false};
});
default:
return state;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。