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

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

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