Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

291
Visualizações
¿Cómo usar los ganchos de reacción useEffect/useReducer + useContext para cambiar el valor del contexto en ts con gracia?

Como iniciador de React , estoy tratando de lograr la gestión del estado en mi aplicación React y uso useContext para compartir el estado de inicio de sesión entre los componentes.

Empecé a aprender y leí esta pregunta: >https://stackoverflow.com/questions/54738681/how-to-change-the-value-of-a-context-with-usecontext?r=SearchResults.

Intenté lo que me dijo la respuesta: use useEffect para actualizar el valor del contexto:

 const initContext: GlobalContext = { login: false, } export const globalContext = React.createContext(null) function App() { return <globalContext.Provider value={useState(initContext)}> {useRoutes(router)} </globalContext.Provider> }

Pero cuando uso ts para hacer lo mismo, recibo un error

El tipo '[GlobalContext, Dispatch<SetStateAction>]' no se puede asignar al tipo 'null'.

Así que probé de otra manera:

 const initContext: GlobalContext = { login: false, } export const globalContext = React.createContext(useState(initContext)) function App() { return <globalContext.Provider value={useState(initContext)}> {useRoutes(router)} </globalContext.Provider> }

entonces tengo otro error:

React Hook "useState" no se puede llamar en el nivel superior. Los React Hooks deben llamarse en un componente de función React o en una función React Hook personalizada.

o intenté export const globalContext = React.createContext() , y obtuve el error Expected 1 arguments, but got 0.

Entonces, mi pregunta es cómo puedo actualizar el valor del contexto en ts, ¿alguien podría ayudarme?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Es probable que desee proporcionar un valor de contexto predeterminado que no sea nulo. El useState también devuelve una matriz, no un objeto con una propiedad booleana de login de sesión. Desea pasar un objeto con inicio de login como propiedad.

 const initContext: GlobalContext = { login: false, } export const globalContext = React.createContext(initContext); // <-- pass initContext as default value function App() { const [login, setLogin] = useState<boolean>(false); return ( <globalContext.Provider value={{ login }}> {useRoutes(router)} </globalContext.Provider> ); }

Actualizar

Si necesita actualizar el valor de login de sesión, el actualizador de estado setLogin debe pasarse en el valor Contexto.

Ejemplo:

 interface IGlobalContext { login: boolean; setLogin: React.Dispatch<React.SetStateAction<boolean>>; } const initContext: IGlobalContext = { login: false, setLogin: () => {} }; const GlobalContext = React.createContext(initContext); const useGlobalContext = () => React.useContext(GlobalContext); function App() { const [login, setLogin] = useState<boolean>(false); return ( <GlobalContext.Provider value={{ login, setLogin }}> {useRoutes(router)} </GlobalContext.Provider> ); }

Editar how-to-use-react-hooks-useeffect-usereducer-usecontext-to-change-contexts-val

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda