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

146
Visualizações
ReactJs: cómo hacer que el componente raíz se vuelva a renderizar cuando cambia un accesorio

Tengo este componente NotificationToast que gestiona las notificaciones.
Necesito que siempre se represente cuando el usuario esté autenticado .

Así que esto es lo que hice:

 class App extends Component { render() { const state = store.getState(); const { isAuthenticated } = state.auth; return ( <Provider store={store}> <BrowserRouter basename="/"> <Switch> <PublicRoute path="/register-page" component={RegisterPage} /> <PrivateRoute path="/profile-page" component={ProfilePage} /> <Redirect to="/home" /> </Switch> {isAuthenticated && ( <div> <NotificationToast /> </div> )} </BrowserRouter> </Provider> ); } } export default App;

El problema es que esto no funciona en el siguiente escenario :

  1. El usuario no ha iniciado sesión.
  2. Entonces él no está autenticado. Entonces state.auth.isAuthenticated es false
  3. Cuando inicia sesión, state.auth.isAuthenticated se establece en true .
  4. Pero el problema es que la App no detecta este cambio y, por lo tanto, no se vuelve a procesar.
  5. Y así, NotificationToast no se procesa.
  6. Y entonces el sistema de notificación no funciona.

Esto funciona cuando el usuario actualiza la página después de iniciar sesión, porque state.auth.isAuthenticated es true desde el principio.

Esto se debe a este código:

 if (localStorage.jwtToken) { // Set auth token header auth setAuthToken(localStorage.jwtToken); // Decode token and get user info and expiration const decoded = jwt_decode(localStorage.jwtToken); // Set User and is Authenticated store.dispatch(setCurrentUser(decoded)); // Now if you reload a page, if the user has already logged-in you will still have his info in he state store.dispatch(clearCurrentProfile()); // Check for expired token const currentTime = Date.now() / 1000; if (decoded.exp < currentTime) { store.dispatch(logoutUser()); store.dispatch(clearCurrentProfile()); // Redirect to login window.location.href = "/login"; } }

Comprueba si el usuario ya inició sesión y, si lo hizo, establece state.auth.isAuthenticated en true .

¿Alguna sugerencia?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

useStore se utiliza para recuperar la tienda. Pero dicho acceso a la tienda solo se puede usar para la manipulación de la tienda, como el reemplazo del reductor. Cuando se cambia la tienda, el componente que accede a la tienda de esta manera no se actualiza.

Utilice "useSelector"

const isAuthenticated = useSelector(state => state.auth)

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