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

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

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 Report

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 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!