user6377312
user6377312

Reputation:

React useState -how to set object with arrays?

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

Answers (1)

Julian Kleine
Julian Kleine

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

Related Questions