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

105
Views
El estado de reacción cambia inesperadamente al intentar cambiar dinámicamente el estado

Tengo ciertas rutas definidas en routes.tsx .
Estoy usando esto para llenar dinámicamente una barra lateral (cajón de interfaz de usuario de material).
Las rutas tienen la siguiente estructura:

 const AppRoutes = { group_a: { title: "", icon: <material icon JSX>, path: "", children: { ...same structure as a group, but without further children } } }

Después de obtener las rutas, creé un objeto de estado para realizar un seguimiento de la expansión/contracción de los grupos.

 let menuGroups = Object.keys(AppRoutes); const [groupOpen, setGroupOpen] = React.useState(() => { const state = {}; for (let group of menuGroups) (state as any)[group] = true; return state; }); const handleGroupToggle = (group: string) => { setGroupOpen(state => (state as any)[group] = !(state as any)[group]); // something wrong here? idk };

Pero esto no está funcionando como se esperaba.
Inicialmente los grupos están abiertos como se esperaba. Pero al hacer clic en cualquier grupo, todos los grupos colapsan juntos. Y luego otro intento de volver a abrirlos da como resultado un error. Uncaught TypeError: Cannot create property 'group_a' on boolean 'false'
En una investigación más profunda, descubrí que el objeto de estado se ha convertido de alguna manera en un false booleano.

Aquí hay un codesandbox para replicar esto:https://codesandbox.io/s/flamboyant-rgb-oin62u?file=/src/App.js

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Dos problemas:

  1. La devolución de llamada no devuelve el estado actualizado
  2. el estado esta mutado

Manejador fijo:

 const handleGroupToggle = (group) => { setGroupOpen((state) => ({ ...state, [group]: !state[group] })); };

Editar tonto-snyder-el445g

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!