Reputation:
I cant seem to be able to update an object including arrays. Ive researched and still dont know. Thank you.
the structure of state:
items = {
names: [],
cities: []
}
const [items, setItems] = useState({});
const update = (categoryName, element) => setItems(...items, [categoryName]: element)
update("names", "mike")
this just replaces elements inside array but doesnt add to them
Upvotes: 0
Views: 79
Reputation: 1547
You would want to use the callback function and get the last state, like so
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
Full example
import { useEffect, useState } from "react";
export default function App() {
const [items, setItems] = useState({ names: [] });
const update = (categoryName, element) =>
setItems((oldItems) => ({
...oldItems,
[categoryName]: [...(oldItems[categoryName] || []), element]
}));
// example to call `update`
useEffect(() => {
update("test", "blub");
}, []);
return (
<div className="App">
{items.test?.map((item) => (
<p>{item}</p>
))}
</div>
);
}
Upvotes: 1