3 回答
TA贡献2065条经验 获得超13个赞
错误在handleDecrement和handleIncrement
const counters = [...count.data];
...
setCounters(counters);
在你的初始状态,count是一个有data属性的对象。当你setCounters(counters),你设置count为一个数组,然后,你尝试.data从count渲染方法中访问,但那undefined会导致错误。
你需要改变
setCounters(counters); // set count as an array
至
setCounters({data: counters}); // set count as an object with property 'data' as an array
TA贡献1856条经验 获得超5个赞
在您的某些方法中,您将counters状态设置为数组。但是在初始化中,您存储的counters是一个具有数据属性的对象(这是一个数组)。
当您调用handleDelete存储在counters数组中的方法时。因此,当组件重新渲染时,它会尝试调用该filter方法,counters.data但counter.data当时并不存在。
为了解决这个问题,你可以初始化counters状态,使其成为一个数组:
const [count, setCounters] = useState([
{ id: 1, value: 4, },
{ id: 2, value: 0, },
{ id: 3,value: 0, },
{ id: 4, value: 0, },
]);
并考虑到您的代码的其余部分count不再具有data属性。
另一种解决方案是更新count保持原始结构的状态。该handleDelete方法如下所示:
const handleDelete = counterId => {
const counters = count.data.filter(c => c.id !== counterId);
setCounters({ data: counters });
};
添加回答
举报