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

133
Visualizações
TypeScript AuthContext no puede tomar indefinido cuando está en rutas

Estoy usando TypeScript y necesito crear una ruta con la información del usuario y firmar con google desde firebase (planeo cambiar a Redux como ejercicio más adelante).

Sucede que al escribir el usuario, si está conectado = Usuario, si no es = indefinido, pero el enrutador no tomará un indefinido como hijo ...

 import { createContext, useState } from "react"; import { BrowserRouter, Route, Routes } from "react-router-dom"; import { auth, firebase } from "./services/firebase"; import { Home } from "./pages/Home"; import { NewRoom } from "./pages/NewRoom"; type User = { id: string; name: string; avatar: string; }; type AuthContextType = { user: User | undefined; signInWithGoogle: () => Promise<void>; }; export const AuthContext = createContext({} as AuthContextType); function App() { const [user, setUser] = useState<User>(); async function signInWithGoogle() { // provider is whos giving the log in - google const provider = new firebase.auth.GoogleAuthProvider(); const result = await auth.signInWithPopup(provider); if (result.user) { // username, photoLocation, uniqueID const { displayName, photoURL, uid } = result.user; // what if theres no data? if (!displayName || !photoURL) throw new Error("Missing information from Google Account"); // set user information setUser({ id: uid, name: displayName, avatar: photoURL, }); } } return ( <BrowserRouter> <Routes> <AuthContext.Provider value={{ user, signInWithGoogle }}> <Route path="/" element={<Home />} /> <Route path="/room/new" element={<NewRoom />} /> </AuthContext.Provider> </Routes> </BrowserRouter> ); } export default App;
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Siempre que no desee renderizar nada, use null en lugar de undefined . Si el usuario no ha iniciado sesión, puede redirigir a una página no autorizada usando <Navigate to="/signin" /> que es un elemento secundario válido para el enrutador (solo una sugerencia).

about 4 years ago · Juan Pablo Isaza Relatório

0

Lo siento, era tarde y había pasado mi hora de acostarme, fue una solución simple:

antes: `regresar (

 <Routes> <AuthContext.Provider value={{ user, signInWithGoogle }}> <Route path="/" element={<Home />} /> <Route path="/room/new" element={<NewRoom />} /> </AuthContext.Provider> </Routes> </BrowserRouter>

después:

`` volver (

 <BrowserRouter> <AuthContext.Provider value={{ user, signInWithGoogle }}> <Routes> <Route path="/" element={<Home />} /> <Route path="/room/new" element={<NewRoom />} /> </Routes> </AuthContext.Provider> </BrowserRouter>

); ``

Simplemente mueva AuthContext fuera de Rutas ya que no es una Ruta, obviamente

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