Estoy buscando el filtro React useState hook array. Sin obtener ninguna respuesta. Por favor, ayúdame.
Defino la matriz de cadenas useState-
const [filterBrand, setFilterBrand] = useState<string[]>([]);Aquí está mi función para filtrar esta matriz y empujar, extraer datos:
const brandHandler = (item: string) => { //Here I need if filterBrand already have the item then remove it and update the state, else add the item to this array and update the state } Aquí necesito verificar si item ya está en filterBrand . luego elimínelo de filterBrand y actualice State . De lo contrario, necesito agregar el item a filterBrand y actualizar el State
Ya lo probé-
const brandHandler = (item: string) => { const items: string[] = [...filterBrand]; if (!filterBrand.includes(item)) { items.push(item) } else { return items.filter(f => f !== item) } setFilterBrand(prevState => ({ ...prevState, ...items })); }Pero obtener este error-
Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method
Hacer esto
// setFilterBrand(prevState => [ ...prevState, ...items ]); would work setFilterBrand(items) // likely what you want insteaden vez de
setFilterBrand(prevState => ({ ...prevState, ...items }));Estás transformando tu matriz en un objeto por alguna razón aquí
Código completo:
const brandHandler = (item: string) => { let items: string[] = [...filterBrand]; if (!filterBrand.includes(item)) { items.push(item) } else { items = items.filter(f => f !== item) } setFilterBrand(items); }