Javascript React从数组状态删除项不会重新渲染
我需要从我的数组状态中删除一个项,但它不能按我需要的方式工作。我从服务器的详细信息obj中获取状态,并将其保存到Javascript React从数组状态删除项不会重新渲染,javascript,reactjs,Javascript,Reactjs,我需要从我的数组状态中删除一个项,但它不能按我需要的方式工作。我从服务器的详细信息obj中获取状态,并将其保存到name。它是一个对象数组 const [name, setName] = useState( [...details?.name] || [] ); 我的添加功能可根据需要工作: const addName = () => { nameForm.validateFields().then(values => { setName([...nam
name
。它是一个对象数组
const [name, setName] = useState(
[...details?.name] || []
);
我的添加功能可根据需要工作:
const addName = () => {
nameForm.validateFields().then(values => {
setName([...name, values]);
nameForm.resetFields();
setModalVisible(false);
});
};
但是,remove函数不起作用。在第一次调用函数时,我可以工作,但每次再次调用该函数时,它都使用名称状态的初始声明。例如,如果数组的大小为4,则第一次调用将删除一个元素,该元素的大小为3。如果我再次调用该函数,名称仍然是大小4
const removeName = (obj) => {
setName([...name.filter(i => i !== obj)]);
};
您不能使用
来比较对象==代码>操作员。相反,您需要比较对象的一些属性。您没有说明对象具有哪些属性,但假设它们具有id属性:
setName([...name.filter(i => i.id !== obj.id)]);
将起作用。您无法使用比较对象==代码>操作员。相反,您需要比较对象的一些属性。您没有说明对象具有哪些属性,但假设它们具有id属性:
setName([...name.filter(i => i.id !== obj.id)]);
会有用的。我试过了,但运气不好。问题是项目确实被删除了,但它从原始状态而不是新状态中删除了它。原始状态是什么意思?如果你在Chrome中使用react-dev工具,你看到状态被更新了吗?我试过了,但没有成功。问题是项目确实被删除了,但它从原始状态而不是新状态中删除了它。原始状态是什么意思?如果您在Chrome中使用react-dev工具,您是否看到状态正在更新?