Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

150
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!