reactjs - 在 React 上下文中设置嵌套数组
问题描述
我试图弄清楚如何更新嵌套在 React 上下文中的数组。以下是我正在使用的上下文。它由“列表”组成。每个列表都包含一个“项目”数组。
import React, {useState, createContext} from 'react';
export const ListerContext = createContext();
export const ListerProvider = (props) => {
const [lists, setLists] = useState([
{
id: 1,
items: [{
itemid: 1,
text: 'Hello'
},
{
itemid: 2,
text: 'world'
}]
},
{
id: 2,
items: [{
itemid: 2,
text: 'Test'
}]
}
]);
return(
<ListerContext.Provider value={[lists, setLists]}>
{ props.children }
</ListerContext.Provider>
);
}
我一直在尝试使用下面的“setLists”方法更改嵌套数组,但它不起作用。我在这里做错了什么?
const removeListItem = (e) => {
setLists((prevList)=>{
for(var i = 0; i < prevList.length; i++){
if(prevList[i].id === parseInt(e.target.value[2])){
prevList[i].items = (prevList[i].items.filter(function(item) {
return item.itemid !== parseInt(e.target.value[0]);
}))
}
}
return prevList;
});
}
解决方案
正如@zero298 在他们的评论中提到的,您需要将整个列表传递到您的状态更新函数setLists
中。您正在使用“字典列表”初始化状态及其更新功能,因此您需要继续这样对待它,您不能有选择地更改字典中的少数属性或列表中的少数元素,而无需更新整个列表。
轻松更正您的代码将有条件地使用更新的值制作列表的新副本,然后使用您的状态更新功能将该列表设置为您的新状态。
干杯!
推荐阅读
- c# - 如何在 C# 的泛型方法中访问属性值?
- java - 如何将图像从项目目录检索到 jlabel?
- microcontroller - 带有 GSM 模块的 PIC 微控制器
- asp.net - 使用 Javascript 渲染 React JS 组件
- spring - 为什么 Spring bean 必须是可序列化的?
- python-2.x - 为什么 41 == 0041 的结果在 python 中给出 False?
- amazon-web-services - 使用 Amazon lambda 函数和 API Gateway 创建 API
- git - 拉分支后的 Intellij 身份验证错误
- javascript - 添加新行时在顶部滚动表格
- python - 散点图多类标签