Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Chamada de variável em outro componente

Pessoal, boa tarde!

Estou com uma dúvida em um projeto que estou fazendo.

Preciso passar o estado de uma variável de um componente para outro..

Componente Login:

export default function Login() {
  const [login, setLogin] = useState("admin");
  const [password, setPassword] = useState("123");
  const navigate = useNavigate();
  const [logado, setLogado] = useState(false);     <------

  function Logar(e) {
    e.preventDefault();
    if (login === "admin" && password === "123") {
      setLogado(true); <---------
      navigate("/home");
    } else {
      alert("login incorreto");
    }
    setLogin("");
    setPassword("");
    return logado
  }

Preciso passar o estado da state "logado" para o componente abaixo:

export default function RoutesAPP() {
  const Private = ({ Item, logado }) => {

    return logado > 0 ? <Item /> : <Login />;   <---------- Esta variável "logado" precisa receber o estado que estava no componente Login
  };  
  return (
    <BrowserRouter>
      <Routes>
        <Route exact path="/home" element={<Private Item={Home} />} />
        <Route path="/incluir" element={<Private Item={Incluir} />} />
        <Route path="/" element={<Login />} />
        <Route path="*" element={<Login />} />
      </Routes>
    </BrowserRouter>
  );
}

Alguém sabe como resolver?

2 respostas
solução!

Fala, Gustavo, tudo bom?

Você pode passar como props se o seu componente for um filho do componente Login, ou se não você pode usar o Context do React para disponibilizar seus estados para múltiplos componentes.

Se quiser saber mais sobre como usar o Context você pode consultar a documentação do React, e tem também este artigo do Matheus Alberto sobre Estados Globais.

Aqui na Alura temos um curso só sobre gerenciamento de estados com Context API que vale a pena conferir, e eu deixo ele abaixo:

Abraços e bons estudos :)

E ai Neilton, blz?

Cara muito obrigado! Vou testar logo que chegar em casa.

Abraço!