[英]React redux - parent state changing, but child components not re-rendering
[英]React not re-rendering on changing array within state object
我有这样的状态:
const [data, setData] = useState[{name:"abc", gender: "male", experience: ["a","b","c"]}];
我有体验的显示功能
const display= () => {
let items = data.experience;
return items.map((val,ind) => {
return(<li key={ind}>{val}</li>);
});
}
如果我删除了一个经验值,我的状态会随着新项目数组的变化而变化,但我的组件没有更新项目,我该如何解决这个问题
删除功能:(它工作正常并且状态改变,但组件没有重新渲染新状态)
const deleteExperience = (ind) => {
let newData = data;
let experiences = newData.experience.filter((val, id) => id !== ind);
newData.experience = experiences;
setData(newData);
};
试试这个 - 你可以像这样删除
export default function App() {
const [data, setData] = React.useState({
name: "abc",
gender: "male",
experience: ["a", "b", "c"]
});
const deleteIt = id => {
let filtered = data.experience.filter(filt => filt !== id);
setData({
...data,
experience: filtered
});
};
return (
<div className="App">
<ul>
{data.experience.map(d => (
<li key={d} onClick={() => deleteIt(d)}>
<h3>{d}</h3>
</li>
))}
</ul>
</div>
);
}
你是如何删除数组的? 如果您使用 splice 删除索引。 有时会发生这种情况,您在数组中的实际数据更改之前调用 setState,因此尝试在对该操作(如 setTimeout)稍作延迟后调用 setState
setTimeout(function(){
// call your setState here with new data
}, 1000);
我已经修复它,问题出在删除功能上:
const deleteExperience = (ind) => {
let newData = data;
let experiences = newData.experience.filter((val, id) => id !== ind);
newData.experience = experiences;
setData(newData);
};
更正(应使用对象扩展) as = 符号不会创建新数组,而是创建对原始数组的引用:
const deleteExperience = (ind) => {
let newData = {...data};
let experiences = newData.experience.filter((val, id) => id !== ind);
newData.experience = experiences;
setData(newData);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.