javascript - Exportar un estado desde una función hook a otro componente
Tengo un archivo/función hook en el que quiero exportar un estado llamado 'isAuth'. Cuando intento importar este estado en otro archivo como import {isAuth} from '../AuthService/AuthRoute' obtengo un error de intento de importación. Mi plan es establecer y obtener este estado globalmente en mi aplicación de React
Así es como quiero exportar el estado desde la función/hook del componente:
export default function AuthRoute () {
const [isAuth, setIsAuth] = useState(false);
return {isAuth}
}
Así es como planeo importar el estado
import {isAuth} from '../AuthRoute/AuthRoute'
function Login () {
const [usernameAuth, setUsernameAuth] = useState("");
const [passwordAuth, setPasswordAuth] = useState("");
const [loginStatus, setLoginStatus] = isAuth(); //Imported state
const [inputResponse, setInputResponse] = useState("");
Respuesta #1
Puedes usar contextos para establecer estados globales como este. Crea un archivo llamado "AuthContext" que se vea así
import { createContext } from 'react';
export const AuthContext = createContext(false);
En tu archivo App.js puedes crear un estado y proporcionarlo a tus componentes hijos de la siguiente manera
import React, { useState } from 'react';
import { AuthContext } from './path/to/AuthContext';
const App = props => {
const [isAuth, setIsAuth] = useState(false);
return (
<AuthContext.Provider value={[isAuth, setIsAuth]}>
//YOUR APPLICATION
</AuthContext.Provider >
)
}
Ahora tienes tu estado isAuth proporcionado a todos tus componentes de nivel superior. Si alguna vez quieres ver o manipular ese estado en un componente, simplemente haz lo siguiente:
import React, { useContext } from 'react';
import { AuthContext } from './path/to/AuthContext';
const YourComponent = props => {
const [isAuth, setIsAuth] = useContext(AuthContext);
return (
//Your component code
)
}
Como nota final, aconsejaría no usar un booleano para verificar si alguien está autorizado o no a nivel global. Puede causar problemas extraños en ocasiones. Es mucho más seguro usar cadenas como "AUTHORIZED" o "NOT_AUTHORIZED".
Respuesta #2
Así no funciona la exportación.
En tu código, estás exportando la función en sí, no el valor que devuelve.
Si vas a escribir un hook personalizado, solo úsalo así:
export default function useAuthRoute () {
const [isAuth, setIsAuth] = useState(false);
return {isAuth}
}
import useAuthRoute from '../AuthRoute/AuthRoute'
function Login () {
const { isAuth } = useAuthRoute()
...
Necesitas "llamar" a esa función y usar el valor que retorna. Y asegúrate de comenzar el nombre de la función con "use" para seguir las reglas de los hooks de React. Puedes encontrar más sobre export aquí
