Replace array Element mit einem anderen, ohne mutierend Zustand
Dies ist, wie Beispiel von meinem Zustand aussieht:
const INITIAL_STATE = {
contents: [ {}, {}, {}, etc.. ],
meta: {}
}
Ich muss in der Lage sein und irgendwie ersetzen, ein Element im Inhalt von array-wissen, dessen index habe ich versucht:
return {
...state,
contents: [
...state.contents[action.meta.index],
{
content_type: 7,
content_body: {
album_artwork_url: action.payload.data.album.images[1].url,
preview_url: action.payload.data.preview_url,
title: action.payload.data.name,
subtitle: action.payload.data.artists[0].name,
spotify_link: action.payload.data.external_urls.spotify
}
}
]
}
wo action.meta.index
ist der index des array-Elements möchte ich ersetzen mit einem anderen Inhalt-Objekt, aber ich glaube, dass dies nur ersetzt ganze Reihe zu diesem einen Objekt, ich bin vorbei. Ich habe auch daran gedacht, mit .splice()
aber das wäre nur mutieren array?
- Werfen Sie auch einen Blick auf Reagieren die Unveränderlichkeit Helfer - facebook.github.io/react/docs/update.html Sie sind nicht so schwer zu bedienen, wie Sie Aussehen und wirklich lässt sich der code leichter zu Lesen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Splice
mutieren das array, das Sie verwenden müssenSlice
. Und Sie müssen auchconcat
die in Scheiben geschnittenen Stück .Beachten Sie, dass
Array.prototype.map()
(docs) hat nicht mutieren die original-array, so dass es bietet eine andere option:Einfach auf zu bauen @sapy die Antwort, die richtig ist. Ich wollte Ihnen zeigen, ein weiteres Beispiel zum ändern einer Eigenschaft eines Objekts innerhalb einer Reihe in der Redux ohne mutierend den Staat.
Hatte ich ein array von
orders
in meinem Zustand. Jederorder
ist ein Objekt mit vielen Eigenschaften und Werte. Ich jedoch wollte nur zum ändern dernote
Eigenschaft. So ein Ding wie dieseswo zum Beispiel
order3_obj = {note: '', total: 50.50, items: 4, deliverDate: '07/26/2016'};
So, in meinen Druckminderer hatte ich den folgenden code:
Also im Grunde genommen, tun Sie den folgenden:
1) Scheibe aus dem array, bevor
order3_obj
so[order1_Obj, order2_obj]
2) Concat (ich.e add in) der bearbeiteten
order3_obj
durch die Verwendung der drei dot...
verbreiten Betreiber und die Besondere Eigenschaft, die Sie ändern möchten (ich.enote
)3) Concat in der restlichen Aufträge array mit
.concat
und.slice
am Ende.concat(state.orders.slice(action.index + 1))
was alles nachorder3_obj
(in diesem Fallorder4_obj
ist die einzige linke).