Reaccionar ganchos useState() con objeto

Resuelto isaacsultan asked hace 5 años • 19 respuestas

¿Cuál es la forma correcta de actualizar el estado, en un objeto anidado, en React with Hooks?

export Example = () => {
  const [exampleState, setExampleState] = useState(
  {masterField: {
        fieldOne: "a",
        fieldTwo: {
           fieldTwoOne: "b"
           fieldTwoTwo: "c"
           }
        }
   })

¿ Cómo se utilizaría setExampleStatepara actualizar exampleState( aagregar un campo)?

const a = {
masterField: {
        fieldOne: "a",
        fieldTwo: {
           fieldTwoOne: "b",
           fieldTwoTwo: "c"
           }
        },
  masterField2: {
        fieldOne: "c",
        fieldTwo: {
           fieldTwoOne: "d",
           fieldTwoTwo: "e"
           }
        },
   }
}

b(¿Cambiar valores)?

const b = {masterField: {
        fieldOne: "e",
        fieldTwo: {
           fieldTwoOne: "f"
           fieldTwoTwo: "g"
           }
        }
   })
isaacsultan avatar Jan 11 '19 23:01 isaacsultan
Aceptado

Puedes pasar un nuevo valor como este:

  setExampleState({...exampleState,  masterField2: {
        fieldOne: "a",
        fieldTwo: {
           fieldTwoOne: "b",
           fieldTwoTwo: "c"
           }
        },
   })
aseferov avatar Jan 11 '2019 16:01 aseferov

Si alguien está buscando actualizaciones de ganchos useState() para el objeto

A través de entrada

const [state, setState] = useState({ fName: "", lName: "" });
const handleChange = e => {
    const { name, value } = e.target;
    setState(prevState => ({
        ...prevState,
        [name]: value
    }));
};
<input
    value={state.fName}
    type="text"
    onChange={handleChange}
    name="fName"
/>
<input
    value={state.lName}
    type="text"
    onChange={handleChange}
    name="lName"
/>

A través de onSubmit o clic en el botón

setState(prevState => ({
    ...prevState,
    fName: 'your updated value here'
}));
Maheshvirus avatar Apr 16 '2020 04:04 Maheshvirus