javascript - 反应地图功能停止工作状态更新
问题描述
我正在尝试使用 React Hooks 对处于状态的对象进行更新,但是当我尝试更新 Objet 时,该功能.map
停止工作。
首先我有这个handleCheckedFilterChange
功能,它改变了状态对象,但组件没有重新渲染:
const handleCheckedFilterChange = (name) => {
let prevFilters = filters;
for (let filter in prevFilters) {
if (prevFilters[filter].name === name) {
prevFilters[filter].checked = !prevFilters[filter].checked;
prevFilters[filter].filters.map((value) => {
value.disabled = !value.disabled;
});
setFilters(prevFilters);
break;
}
}
};
然后我将其更改为这个以使组件再次呈现:
const handleCheckedFilterChange = (name) => {
let prevFilters = { ...filters };
for (let filter in prevFilters) {
if (prevFilters[filter].name === name) {
prevFilters[filter].checked = !prevFilters[filter].checked;
prevFilters[filter].filters.map((value) => {
value.disabled = !value.disabled;
});
setFilters(prevFilters);
break;
}
}
};
但是第二个给我一个错误:
TypeError:filters.map 不是函数
错误是当我调用以下内容时:
const renderCards = filters.map((filter) => (
<div className="card text-center">
...
</div>
));
解决方案
在第一个选项中,您尝试直接修改 React 中不允许的状态,这useState
就是它没有呈现您预期的更改的原因。
第二个选项的问题是您试图使用{}
而不是[]
. 尝试如下:
let prevFilters = [ ...filters ];
背后的原因是.map()
数组而不是对象上的函数。
推荐阅读
- python - 有 Python GDTF 模块吗?
- eclipse - 用于一般文档生成的 m2doc
- firebase - Google Firebase 身份验证多次
- gitlab - Gitlab CI:仅替换:*allowed_branches 规则:
- amazon-web-services - 如何使用标签从 Glacier 恢复 S3 对象
- python - 如何为我的员工组织健康检查(使用 python 代码的 Docker)?
- javascript - 如何在nodejs中构建新类
- python - repl.it 中未显示条形图
- flexbox - 如何计算弹性项目的宽度?以及它如何受其子项宽度的影响?
- javascript - 我是否将我的(大部分)静态网站放在 public/ 文件夹或 index.js 中?