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

158
Vistas
useState no actualiza todos los componentes de mi aplicación

hola Trabajando con reaccionar y me encontré con un problema desconcertante.

 import { useState } from "react"; function useTheme() { const [themeName, setThemeName] = useState("dark"); return [themeName, setThemeName]; } function Other() { const [themeName, setThemeName] = useTheme(); return <div>{themeName}</div>; } function ThemeSwitcher() { const [themeName, setThemeName] = useTheme(); return ( <> <button onClick={() => { themeName == "dark" ? setThemeName("light") : setThemeName("dark"); }} > {"BUTTON"} </button> {themeName} </> ); } function App() { const [themeName, setPalette] = useTheme(); return ( <div> <ThemeSwitcher /> <Other /> <div>{themeName}</div> </div> ); } export default App;

Esta es una versión extremadamente básica de mi problema, eliminé todo lo que se me ocurrió y aún persiste. Tengo una aplicación con un enlace llamado useTheme, que proporciona una función que cambia el nombre de una variable de estado "themeName".

Tengo un componente de botón ThemeSwitcher que, al hacer clic, cambia el nombre del tema entre "oscuro" y "claro".

Al hacer clic en el botón, la variable de estado themeName se actualiza (que estoy seguro, ya que el fragmento {themeName} dentro de ThemeSwitcher se actualiza correctamente). Sin embargo, {themeName} dentro de la aplicación y {themeName} dentro de Other en realidad no se actualizan. No veo la diferencia aquí, y actualmente estoy desconcertado en cuanto a por qué uno se actualizaría y los otros no.

Estado inicial

Estado después de un clic.

¿Alguna idea de por qué el componente de la aplicación no se vuelve a representar a pesar de que cambia la variable de estado?

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

0

Son estados completamente separados. Este:

 function useTheme() { const [themeName, setThemeName] = useState("dark"); return [themeName, setThemeName]; }

efectivamente no es diferente de usar useState en sí mismo. Entonces su problema es similar a preguntar por qué, aquí:

 function Other() { const [themeName, setThemeName] = useState(); return <div>{themeName}</div>; } function ThemeSwitcher() { const [themeName, setThemeName] = useState(); // ...

los dos themeNames de tema no están sincronizados, es porque no tienen conexión entre sí.

Para solucionar esto, generalmente hay 2 enfoques que se pueden usar:

  • Declare el estado del tema en un componente, el componente superior de modo que todos los descendientes lo usen. Aquí, esa es la aplicación. Luego transmita el estado y el setter estatal a todos los niños, y pídales que usen el accesorio según sea necesario. Por lo general, este es un buen enfoque cuando el estado y el establecidor de estado no se usan en muchos lugares.
 function App() { const [themeName, setThemeName] = useTheme(); return ( <div> <ThemeSwitcher {...{ themeName, setThemeName }} /> <Other {...{ themeName, setThemeName }} /> <div>{themeName}</div> </div> ); }
  • O bien, utilice la API de contexto en su lugar . Requiere más configuración, pero es un buen enfoque cuando desea crear algo en un padre y permitir que cada descendiente lo consuma, sin importar dónde se encuentre en el árbol de componentes, sin pasar manualmente los valores como accesorios en todas partes.
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