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

510
Views
Reactjs useSelector Demasiadas re-renderizaciones. React limita el número de renderizados para evitar un bucle infinito

Quiero usar redux en mi aplicación react typescript

He podido crear una tienda redux y

también enviar a redux

Quiero que me envíen el valor a la tienda

usando useSelector pero recibo este error

 Too many re-renders. React limits the number of renders to prevent an infinite loop.

Mi código

UsuarioReductor

 export const userReducer = (state=null, action) => { switch(action.type){ case "LOGIN": return action.payload; case "LOGOUT": return action.payload; case default: return state; } }

Inicio de sesión.tsx

 import React, { useState } from "react"; import {useDispatch, useSelector} from 'react-redux' const Login = () => { const reduxState= useSelector((state) => state); dispatch({ type: "LOGIN", payload: "token" }); return ( <div className="__login"> {JSON.stringify(reduxState)} </div> ) }; export default Login;

Aplicación.tsx

 import React from 'react'; function App() { return ( <div className="App"> <Routes> <Route path="/login" element={ <Login />} /> </Routes> </div> ); } export default App;

índice.tsx

importar React desde "react";

 import { createStore } from "redux"; import { Provider } from "react-redux"; import { composeWithDevTools } from "redux-devtools-extension"; import rootReducer from "./reducers"; // create store const store = createStore(rootReducer, composeWithDevTools()); ReactDOM.render( <Provider store={store}> <BrowserRouter> <App /> </BrowserRouter> </Provider>, document.getElementById("root") ); reportWebVitals();

cerrar sesión.tsx

Cerrar sesión es donde hago clic para cambiar el estado de la aplicación eliminando el token y cambiando el estado a nulo

 import React, { useState } from "react"; import {useDispatch, useSelector} from 'react-redux' const logout= () => { const reduxState= useSelector((state) => state); const logoutApp = () => { dispatch({ type: "LOGOUT", payload: null }); } return ( <div className="__login"> <span onClick={logoutApp}>logout</span> </div> ) }; export default logout;
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Su envío está justo dentro del componente de inicio de sesión. reaccionar componente funcional ejecuta todo en el componente en cada uno de sus renderizados.

 import React, { useState } from "react"; import {useDispatch, useSelector} from 'react-redux' const Login = () => { const reduxState= useSelector((state) => state); dispatch({ //This dispatch will call on it's every render, so after success login it will call dispatch again, and then again ... it leads to an infinite loop type: "LOGIN", payload: "token" }); return ( <div className="__login"> {JSON.stringify(reduxState)} </div> ) }; export default Login;

El mejor método es moverlo a un clic de botón. o a un useEffect.

Método 1, inicie sesión al hacer clic en el botón

 import React, { useState } from "react"; import {useDispatch, useSelector} from 'react-redux' const Login = () => { const reduxState= useSelector((state) => state); const login = () => { dispatch({ type: "LOGIN", payload: "token" }); } return ( <div className="__login"> {JSON.stringify(reduxState)} <button onClick={login} >login</button> </div> ) }; export default Login;

Método 2. Llámalo en useEffect

 import React, { useState,useEffect } from "react"; import {useDispatch, useSelector} from 'react-redux' const Login = () => { const reduxState= useSelector((state) => state); useEffect(() => { dispatch({ type: "LOGIN", payload: "token" }); },[]) //this useEffect will only call on its first render return ( <div className="__login"> {JSON.stringify(reduxState)} </div> ) }; export default Login;
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!