Tengo un problema en el que la reproducción del estado causa problemas de interfaz de usuario y se sugirió que solo actualice un valor específico dentro de mi reductor para reducir la cantidad de reproducción en una página.
este es un ejemplo de mi estado
{
name: "some name",
subtitle: "some subtitle",
contents: [
{title: "some title", text: "some text"},
{title: "some other title", text: "some other text"}
]
}
y actualmente lo estoy actualizando así
case 'SOME_ACTION':
return { ...state, contents: action.payload }
donde action.payload
es una matriz completa que contiene nuevos valores. Pero ahora solo necesito actualizar el texto del segundo elemento en la matriz de contenido, y algo como esto no funciona
case 'SOME_ACTION':
return { ...state, contents[1].text: action.payload }
¿Dónde action.payload
está ahora un texto que necesito para actualizar?
javascript
reactjs
redux
Ilja
fuente
fuente
kolodny/immutability-helper
, ahora esyarn add immutability-helper
yimport update from 'immutability-helper';
Puede utilizar
map
. Aquí hay una implementación de ejemplo:fuente
No tienes que hacer todo en una sola línea:
fuente
Muy tarde para la fiesta, pero aquí hay una solución genérica que funciona con todos los valores de índice.
Usted crea y difunde una nueva matriz desde la matriz anterior hasta la
index
que desea cambiar.Agregue los datos que desee.
Cree y difunda una nueva matriz desde la
index
que desea cambiar hasta el final de la matrizActualizar:
He creado un pequeño módulo para simplificar el código, por lo que solo necesita llamar a una función:
Para ver más ejemplos, eche un vistazo al repositorio.
firma de función:
fuente
Creo que cuando necesita este tipo de operaciones en su estado de Redux, el operador de propagación es su amigo y este principio se aplica a todos los niños.
Supongamos que este es tu estado:
Y quieres sumar 3 puntos a Ravenclaw
Al usar el operador de propagación, puede actualizar solo el nuevo estado dejando todo lo demás intacto.
Ejemplo tomado de este increíble artículo , puede encontrar casi todas las opciones posibles con excelentes ejemplos.
fuente
En mi caso hice algo como esto, basándome en la respuesta de Luis:
fuente
Así lo hice para uno de mis proyectos:
fuente
Me temo que usar el
map()
método de una matriz puede ser costoso ya que se debe iterar la matriz completa. En su lugar, combino una nueva matriz que consta de tres partes:Aquí el ejemplo que he usado en mi código (NgRx, pero el mecanismo es el mismo para otras implementaciones de Redux):
fuente