reactjs - 更新 useState onclick 不更新
问题描述
我正在尝试更新 useState 对象,我的目标是切换按钮并在 useState 中保持哪个按钮打开,哪个按钮关闭。
const SalesChartCard = (data) => {
const [toggleButton, toggleButtons] = useState({
'impressions': true,
'purchasestart': true,
'purchasecancel': true,
'purchasecomplete': true
});
const buttonClick = (dimension) => {
toggleButtons({
dimension: !toggleButton.dimension
});
};
return (
<>
<Button
outline={toggleButton.impressions}
onClick={e => buttonClick('impressions')}
color="primary" className="mb-2">
Impressions
</Button>
<Button
outline={toggleButton.purchasestart}
onClick={e => buttonClick('purchasestart')}
color="secondary" className="mb-2">
Purchase Start
</Button>
<Button
outline={toggleButton.purchasecancel}
onClick={e => buttonClick('purchasecancel')}
color="danger" className="mb-2">
Purchase Cancel
</Button>
<Button
outline={toggleButton.purchasecomplete}
onClick={e => buttonClick('purchasecomplete')}
color="success" className="mb-2">
Purchase Complete
</Button>
</>
);
};
export default SalesChartCard;
解决方案
useState
react 钩子不会浅合并状态更新,您需要自己管理它。
对于给定的点击处理程序:onClick={e => buttonClick('impressions')}
buttonClick
回调处理程序应合并现有状态并使用动态(计算的属性名称)键来更新正确的属性。使用功能状态更新从前一个状态正确计算下一个状态。这可确保所有先前的状态更新在更新时正确合并。
const buttonClick = (dimension) => {
toggleButtons(prevState => ({
...prevState,
[dimension]: !prevState[dimension],
}));
};
推荐阅读
- kubernetes - Keycloak 领域探测尚未准备好
- kubernetes - 在部署 K8s daemonset 时,当一个节点几乎没有资源时会发生什么?
- php - 我有一个要插入数据库的 php 数组,但插入的内容只是说“数组”
- http - Rocket发生错误时如何返回500以外的状态码?
- python-3.x - 在 Python 中使用 int() 将类型转换为整数
- python - Python 正则表达式负向后看,包括行首
- javascript - 如何使 Ctrl-f 始终在 Tabulator Plus 有关分页和高度的问题中工作?
- python-3.x - 执行我的 setuptools console_script 时出现 ModuleNotFoundError
- regex - 正则表达式阻止字符串中超过 3 个数字
- mongodb - 如何创建一个模式以在 mongoDB 上创建一个地方使用 moongose