|
1 | 1 | // App.js |
2 | | -import React, { useState, useEffect } from "react"; |
| 2 | +import React, { useState, useEffect, useRef, useCallback } from "react"; |
3 | 3 | import { |
4 | 4 | BrowserRouter as Router, |
5 | 5 | Route, |
@@ -124,37 +124,42 @@ const obtenerCorreoDesdeToken = (token) => { |
124 | 124 | function AppRoutes({ user, setUser }) { |
125 | 125 | const [loading, setLoading] = useState(true); |
126 | 126 | const navigate = useNavigate(); |
127 | | - |
128 | | - useEffect(() => { |
129 | | - const fetchUser = async () => { |
130 | | - const token = localStorage.getItem("token"); |
131 | | - if (token) { |
132 | | - try { |
133 | | - const correoGuardado = obtenerCorreoDesdeToken(token); |
134 | | - if (correoGuardado) { |
135 | | - const usuario = await consultarUsuarioPorCorreo(correoGuardado); |
136 | | - setUser(usuario); |
137 | | - |
138 | | - if (usuario.isAdmin) { |
139 | | - document.documentElement.style.setProperty("--variable-collection-current-color", "var(--variable-collection-user-admin)"); |
140 | | - navigate("/administrador"); |
141 | | - } else { |
142 | | - document.documentElement.style.setProperty("--variable-collection-current-color", "var(--variable-collection-user-estandar)"); |
143 | | - navigate("/home"); |
144 | | - } |
145 | | - } else { |
146 | | - localStorage.removeItem("token"); |
147 | | - } |
148 | | - } catch (error) { |
149 | | - console.error("Error obteniendo usuario:", error); |
| 127 | + const hasFetchedUser = useRef(false); |
| 128 | + |
| 129 | + const fetchUser = useCallback(async () => { |
| 130 | + const token = localStorage.getItem("token"); |
| 131 | + if (token) { |
| 132 | + try { |
| 133 | + const correoGuardado = obtenerCorreoDesdeToken(token); |
| 134 | + if (correoGuardado) { |
| 135 | + const usuario = await consultarUsuarioPorCorreo(correoGuardado); |
| 136 | + setUser(usuario); |
| 137 | + |
| 138 | + const currentPath = usuario.isAdmin ? "/administrador" : "/home"; |
| 139 | + document.documentElement.style.setProperty( |
| 140 | + "--variable-collection-current-color", |
| 141 | + usuario.isAdmin |
| 142 | + ? "var(--variable-collection-user-admin)" |
| 143 | + : "var(--variable-collection-user-estandar)" |
| 144 | + ); |
| 145 | + navigate(currentPath); |
| 146 | + } else { |
150 | 147 | localStorage.removeItem("token"); |
151 | 148 | } |
| 149 | + } catch (error) { |
| 150 | + console.error("Error obteniendo usuario:", error); |
| 151 | + localStorage.removeItem("token"); |
152 | 152 | } |
153 | | - setLoading(false); |
154 | | - }; |
| 153 | + } |
| 154 | + setLoading(false); |
| 155 | + }, [setUser, navigate]); |
155 | 156 |
|
156 | | - fetchUser(); |
157 | | - }, []); |
| 157 | + useEffect(() => { |
| 158 | + if (!hasFetchedUser.current) { |
| 159 | + fetchUser(); |
| 160 | + hasFetchedUser.current = true; |
| 161 | + } |
| 162 | + }, [fetchUser]); |
158 | 163 |
|
159 | 164 | const handleLogout = () => { |
160 | 165 | localStorage.removeItem("token"); |
|
0 commit comments