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

176
Vistas
El contexto de reacción no se actualiza en ciertos lugares

Al hacer clic en el botón, agrego información del producto al almacenamiento local y la configuro en contexto.

Estoy usando contexto en dos lugares: encabezado y página de productos, la sintaxis es casi la misma. Hay un encabezado de console.log y cada vez que estoy interactuando con el contexto, se dispara instantáneamente, lo que confirma que el contexto funciona bien. Sin embargo, cuando entro en la página de productos, necesito volver a cargarla una vez más para obtener los datos. ¿Porqué es eso?

archivo de contexto

 import React, { useState, useEffect } from "react"; export const LikedContext = React.createContext([{}, () => {}]); export const LikedProvider = (props) => { const [liked, setLiked] = useState(null); useEffect(() => { if (typeof window !== "undefined") { let likedData = localStorage.getItem("liked"); likedData = likedData ? JSON.parse(likedData) : ""; setLiked(likedData); } }, []); return ( <LikedContext.Provider value={[liked, setLiked]}> {props.children} </LikedContext.Provider> ); };

Encabezamiento

 export const LikedProductsIcon = () => { const [liked, setLiked] = useContext(LikedContext); console.log("liked header", liked); const likedCount = null !== liked && Object.keys(liked).length ? liked.totalProductsCount : ""; const totalPrice = null !== liked && Object.keys(liked).length ? liked.totalProductsPrice : ""; return ( <> <CartContainer to="/pamegti-produktai"> <CountCircle> <HeartSvg /> {likedCount ? <span>{likedCount}</span> : ""} </CountCircle> </CartContainer> </> ); };

Página de productos que gustan

 const LikedProducts = () => { const [liked, setLiked] = useContext(LikedContext); console.log("liked page", liked); return ( <Layout> <Container> {liked ? ( liked.products.map((product, index) => ( <ProductsCard product={product} blackText /> )) ) : ( <div>Pamėgtų produktų nėra.</div> )} </Container> </Layout> ); };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Si representa varios <LikedProviders> , cada uno tendrá su propio estado independiente. Establecer estado en uno de ellos no afectará al otro. La razón por la que se sincronizan cuando actualiza la página es que ambos se cargan desde el almacenamiento local y ven el mismo valor. Pero eso solo sucede durante la carga, y se desincronizarán después de eso.

Si desea que se comparta el estado, solo desea representar uno de ellos. Colóquelo en la parte superior de su árbol de componentes (app.js es un buen lugar) para que todos los componentes que lo necesiten puedan acceder a él y elimine el otro.

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