0

When useState update then map loop is not working in array inside of object in useState. React js

import { useState } from "react";
import React from "react";

function Check() {
    
const [Children, setChildren] = useState({data:[], otherdata:{}});
  
 function handleChange(){
 Children["data"] = [...Children["data"], Children["data"].length]
 setChildren(Children)
 alert(Children["data"])
 }

  return (<React.Fragment>
    <div>Check</div>
    {Children["data"].map(data => <div>map</div>)}
    <button
     onClick={handleChange}
    >Add List</button>
  </React.Fragment>);
}
    
export default Check
Munny Reol
  • 41
  • 7
  • 2
    You need to update the actual object, not just the array inside of it, otherwise, you'll have a reference to the same object and react won't rerender: `setChildren({...Children, data: [...Children.data, Children.data.length]})` – Nick Parsons Jul 11 '21 at 06:51

2 Answers2

1

For updating your state you must use your state setter, in this case setChildren and not set your state directly (not doing Children["data"] = [...Children["data"], Children["data"].length]).

Shmulik Klein
  • 3,754
  • 19
  • 34
1

try out this I have fixed issues-

import { useState } from "react";
import React from "react";

function Check() {
  const [Children, setChildren] = useState({ data: [], otherdata: {} });

  function handleChange() {
    setChildren({
      ...Children,
      data: [...Children["data"], Children["data"].length],
    });
  }

  return (
    <React.Fragment>
      <div>Check</div>
      {Children.data.map((ele) => (
        <div>{ele}</div>
      ))}
      <button onClick={handleChange}>Add List</button>
    </React.Fragment>
  );
}

export default Check;
Gulshan Aggarwal
  • 954
  • 1
  • 7
  • 13