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

174
Views
React redux: problemas al agregar varios elementos a una matriz en el objeto de árbol de estado

Estoy mirando redux y agregando nombres a una matriz. El siguiente código funciona (¡más o menos!).

Tengo algunos problemas.

  1. Sé que se recomienda crear un nuevo objeto de árbol de estado cada vez que el estado se pasa a través del reductor, sin embargo, pensé que aún debería funcionar incluso si cambio el objeto de estado que se pasa. En mi código debajo de console.log(store.getState()); funciona si uso var newArr = state.names.concat(action.name); pero no si uso state.names.push(action.name);

  2. Si agrego otro store.dispatch(action) el código no funciona.

    store.dispatch({type: 'ADD_NAME',name: 'PhantomTwo'});

¿Alguien puede explicar por qué esto es así?

  1. Finalmente, ¿debo devolver el estado nuevamente fuera de la declaración de cambio?

Aquí está el código que tengo actualmente a continuación.

 const initialState = { names: [] } function namesApp(state = initialState, action) { switch(action.type) { case 'ADD_NAME': var newArr = state.names.concat(action.name); return newArr; default: return state; } } let store = createStore(namesApp); store.dispatch({ type: 'ADD_NAME', name: 'Phantom' }); console.log(store.getState()); //returns `["Phantom"]`
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Este es el comportamiento de la mutabilidad del objeto de array

Dado que React se preocupa mucho por el cambio de estado para volver a renderizar, debemos cuidar la mutabilidad.

El siguiente fragmento explica la mutabilidad de la matriz.

 let x = []; let y = x; console.log(x); console.log(y); y.push("First"); console.log(x); console.log(y); let z = [...x]; //creating new reference console.log(z); x.push("Second"); console.log(x); //updated console.log(y); //updated console.log(z); //not updated

Entonces, para una mejor funcionalidad, su reductor será como

 function namesApp(state = initialState, action) { switch(action.type) { case 'ADD_NAME': return { ...state, //optional, necessary if state have other data than names ...{ names: [...state.names, action.name] } }; default: return state; } }
over 4 years ago · Santiago Trujillo Report

0

[].concat devuelve una nueva matriz. Pero tu estado era { name: [] } . A pesar de devolver el objeto recién creado con nuevos nombres, el código anterior devolvió la nueva matriz de nombres.

Solución de vainilla

 const initialState = { names: [] }; function namesApp(state = initialState, action) { switch(action.type) { case 'ADD_NAME': var newArr = state.names.concat(action.name); return { ...state, names: newArr }; default: return state; } }

ayudante de inmutabilidad

Para este tipo de trabajo usaría immutability-helper

 import u from 'immutability-helper'; function namesApp(state = initialState, action) { switch(action.type) { case 'ADD_NAME': return u(state, { names: { $push: action.name } }); default: return state; } }

aprende a usar immutability-helper https://facebook.github.io/react/docs/update.html

over 4 years ago · Santiago Trujillo 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!