【发布时间】:2023-02-10 03:31:41
【问题描述】:
我正在尝试使用 useCallback 使用对象更新数组,但它不是更新对象,而是添加或附加一个对象。
const items = [
{
id: 101,
name: 'Mae Jemison',
},
{
id: 201,
name: 'Ellen Ochoa',
},
];
const [headings, setHeadings] = useState(items);
const handleHeadingTextChange = useCallback(
(value, id) => {
let items2 = headings;
items2 = items2.map((item, key) => {
if (items2[key].id == id) {
items2[key].name = value
}
return items2
});
setHeadings((prevState) => [...prevState, items2]) // adding, not updating
//setHeadings((prevState) => [...prevState, ...items2]) // try 2 : still adding
},
[setHeadings],
);
<input type="text" id="101" value="" onChange={handleHeadingTextChange} />
所以,改变预期输出是
items = [
{
id: 101,
name: 'Johaan',
},
{
id: 201,
name: 'Ellen Ochoa',
},
];
但相反,我越来越
items = [
{
id: 101,
name: 'Johaan',
},
{
id: 201,
name: 'Ellen Ochoa',
},
[{
id: 101,
name: 'Johaan',
},
{
id: 201,
name: 'Ellen Ochoa',
}]
];
我不确定如何在 setHeading 函数中设置值,以便它只更新值而不是附加值。有没有办法让它只更新?
【问题讨论】:
-
我的意思是,你告诉它把自己插入自己。所以它做到了。如果在 Array.map 中返回初始数组,则初始数组现在将是从 Array.map 返回的新数组的值
标签: reactjs react-hooks