estoy usando useState para almacenar un objeto, con una propiedad booleana, y usando el operador ternario para cambiar entre pantallas.
cuando hago clic en el botón, veo en la consola que el valor ha cambiado pero la pantalla no se actualiza, no muestra "Estoy dentro", la consola muestra esto:
{logged: false, name: 'example'} Login.js:7 {logged: true, name: 'example'} Login.js:9Cuando cambio el useState a una sola variable, no un objeto, funciona (cambiando los niños), pero realmente quiero usarlo con un objeto. Entonces, quiero saber por qué no funciona, ¿es alguna propiedad de useContext? o limitación en useState? mientras tanto, usaré useState con una sola asignación (booleana) y varias líneas de variables
La razón para usar useContext es para transmitir las variables, en el caso de muchas capas de niños
Aplicación.js
import React, { useState } from "react" import AppMain from './Components/AppMain'; import Login from './Components/Login'; import ExampleContext from "./ExampleContext"; function App() { const [user, setuser] = useState({"logged" : false, name: "example"}) return ( <ExampleContext.Provider value={{ user, setuser }}> {user.logged? <AppMain />:<Login />} </ExampleContext.Provider> ); } export default App;AppMain.js
import React from "react" function AppMain() { return ( <> <p>I'm in</p> </> ) } export default AppMainIniciar sesión.js
import React, { useContext } from "react" import ExampleContext from "../ExampleContext" function Login() { const {user,setuser} = useContext(ExampleContext) function log(){ console.log(user) setuser(a=> {a.logged = true; return a}) console.log(user) } return ( <> <button onClick={log} >Log in</button> </> ) } export default LoginEjemploContexto.js
import { createContext } from "react" const ExampleContext = createContext() export default ExampleContextNo hay nada malo con useState o useContext, su forma de mutar el estado es incorrecta. configurarlo de esta manera:
setuser(a=>({...a,logged:true}));