[英]Why my useState, does not reprint the array with the new elements in it?
为什么我的 useState 属性不起作用? 在过滤器搜索栏中,我试图根据输入重新打印 Array 的元素,但我无法正确重新打印,
const clickSearchIcon = (query) => {
let filteredItems = [];
console.log('ITEAM ALL:', itemsAll); //works --> 9
setItems(itemsAll); //DONT work, --> 1st time: 9 , second time: 0; both times must be 9
console.log('items:', items);
//filtrar items que concuerdan con el query
items.map((item) => {
if (item.title === query) return filteredItems.push(item);
});
//repintar item filtrado con el query
setItems(filteredItems); //does work
};
这是完整的文件,以防您需要更多上下文
itemsAll
从未更改,因此您无需在clickSearchIcon
function 中更新它。 要过滤项目,您可以使用filter
而不是map
。
const clickSearchIcon = (query) => {
const filteredItems = items.filter((item) => item.title === query);
setItems(filteredItems);
};
allItems
从未更改过。 setItems
没有看到它已被更改。 因为allItems
是一个数组,虽然你改变了它的项目,但是 object 本身(认为它是一个指针)并没有改变。
只需使用一个新变量,复制allItems
,然后在新变量上使用setItems
。
let newItems = [...allItems]
// modify newItems
setItems(newItems)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.