1

Can't update the dom after using .push array object is updated

const [people, setPeople] = React.useState(data);

const addItem = () => {
    const itemName = document.querySelector('.input').value;
    const i = people.length + 1;
    people.push({
      id: i,
      name: itemName
    });
    setPeople(people);
    console.log(people);
  }

2 Answers2

0

That is because push changes the original state and you shouldn't change the state manually in react.

Instead, create a shallow copy of your state, then push and then reset the state with the changed array.

const [people, setPeople] = React.useState(data);

const addItem = () => {
    const itemName = document.querySelector('.input').value;
    const i = people.length + 1;
    const newPeople = [...people]; // Create a copy
    newPeople.push({
      id: i,
      name: itemName
    });
    setPeople(newPeople);
    console.log(newPeople);
  }
Thales Kenne
  • 2,705
  • 1
  • 12
  • 26
0
const addItem = () => {
    const itemName = document.querySelector('.input').value;
    const i = people.length + 1;

    // crate new people
    const newPeople = {
      id: i,
      name: itemName
    };

    // concat to existing peoples and set to state
    setPeople(prevState => prevState.concat(newPeople));
    console.log(people);
  }
Sarun UK
  • 6,210
  • 7
  • 23
  • 48
Rajitha Udayanga
  • 1,559
  • 11
  • 21