Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
Actualización del estado del contexto de reacción

Necesito ayuda para actualizar un usuario en varias partes de mi aplicación de reacción. Pude crear con éxito un contexto y acceder a él globalmente, pero cada vez que intento actualizar el estado, se rompe o usa el estado predeterminado Tengo problemas para actualizar el estado, el código va aquí

  1. Archivo de contexto

     import { createContext } from "react"; const user = { Fullname: "Ade Johnson", username: "Jonny", phone: "+234 0987655", email: "jonny@gmail.com", mode: "light", isLoggedIn: false, }; export const UserContext = createContext(user);
  2. Aplicación.js

     import { UserContext } from "../User"; const providerValue = useMemo(() => ({ user, setUser }), [user, setUser]); const { user, setUser } = useContext(UserContext); <UserContext.Provider value={providerValue}> {Children} </UserContext.Provider>

3.Iniciar sesión.js

 function Login() { const [username, setUsername] = useState(""); const [pass, setPass] = useState(""); const { user, setUser } = useContext(UserContext); function proceed(url) { let newArr = {...user}; newArr[0].isLoggedIn = true; newArr[0].Fullname = "Toluwalope"; newArr[0].username = "Toolz"; newArr[0].email = "Tolu@gmail.com"; setUser(newArr); console.log(user); window.location.replace(url); }
  1. Tablero.js

     import React, { useContext, useEffect } from "react"; import { UserContext } from "../User"; function Dashboard() { const { user } = useContext(UserContext); return ( <div className="container-fluid" id="main"> <h5 className="mt-5 pt-5">Welcome {user[0].username},</h5> </div> ); }; export default Dashboard;

En este punto, cuando se carga el tablero, usa el estado predeterminado.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Estás mezclando tus estructuras de datos. Debe desestructurar desde useContext con una matriz (no un objeto), y su objeto user debe ser un objeto (no una matriz):

 const [user, setUser] = useContext(UserContext);

Y

 const newUser = { ...user, isLoggedIn: true }; // etc
about 4 years ago · Juan Pablo Isaza Denunciar

0

Contexto.jsx

 import React from 'react' export const Store = React.createContext({}) export default function StoreProvider({children}){ const [user, setUser] = React.useState({...you user properties}) return( <Store.Provider value={{ user, setUser }} > {children} </Store.Provider> ) }

Aplicación.jsx

 import StoreProvider from 'path/to/store_provider.jsx' export default function App(){ return ( <StoreProvider> //here you add your components that you want // to have access to the store or your router </StoreProvider> ) }

Iniciar sesión.jsx

 import React from 'react' import {Store} from 'path/to/store' export default function Login(){ //now you can update user successfully like this // setUser(prev => {...prev, newKey: newValue}) const {setUser} = React.useContext(Store) return ( //your jsx here ) }

Tablero.jsx

 import React from 'react' import {Store} from 'path/to/store' export default function Dashboard(){ //now you can read user successfully like so // user.FirstName etc. //updating user from other components will update this view automatically const {user} = React.useContext(Store) return ( //your jsx here ) }

Su código en general no se compila de la forma en que nos lo muestra. Pero incluso si omitiste algunas partes, hay dos fallas.

  1. Está pasando usuario directamente al valor StoreProvider, lo que significa que puede desestructurar Nombre completo, nombre de usuario, etc. desde la tienda y no {usuario, setUser}
  2. No está pasando setUser al valor StoreProvider, lo que significa que no puede desestructurarlo y no puede actualizar su estado. Más tarde haces algo con useMemo() pero esto es dudoso. Puede funcionar, puede que no, o puede causar errores. Por lo general, desea pasar un estado o un reductor al valor StoreProvider.

Además, useMemo() no es necesario. Consulte los documentos para conocer los casos de uso más adecuados de useMemo().

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda