Ich versuche, das folgende zu erstellen: ein Forum, wo man einen Beitrag erstellen kann, der die ADD_POST auslöst, und der Beitrag erstellt wird, und dem 'posts'-Objektarray hinzugefügt. Jedes 'post'-Objekt wird mit einem' comments'-Array initialisiert, das Kommentartexte ('commentTxt') enthält, die innerhalb dieses Posts eingegeben werden.Wie behandelt man den Zustand in doppelt verschachtelten Arrays (ReactJS + Redux) richtig?
let postReducer = function(posts = [], action) {
switch (action.type) {
case 'ADD_POST':
return [{
id: getId(posts), //just calls a function that provides an id that increments by 1 starting from 0
comments: [
{
id: getId(posts),
commentTxt: ''
}
]
}, ...posts]
Dann, wenn der Benutzer diese Stelle eintritt, gibt es einen Kommentar-Abschnitt, wo der Benutzer einen Kommentartext und ein neues Objekt eingeben würde (via ‚ADD_COMMENT‘) mit dem ‚posts.comments‘ array
hinzugefügt werdencase 'ADD_COMMENT':
return posts.map(function(post){
//find the right 'post' object in the 'posts' array to update the correct 'comments' array.
if(post.id === action.id){
//update 'comments' object array of a 'post' object by adding a new object that contains 'commentTxt', and replaces the current 'comments' array
return post.comments = [{
id: action.id,
//new object is made with text entered (action.commentTxt) and added to 'post.comments' array
commentTxt: action.commentTxt
}, ...post.comments]
}
})
und würde es anzeigen. Und jedes Mal, wenn ein neuer Kommentar hinzugefügt wird, wird ein neues Element zusammen mit den vorherigen Kommentardokumenten im Array gerendert.
{
this.props.post.comments.map((comment) => {
return <Comment key={comment.id} comment={comment} actions={this.props.actions}/>
})
}
Ich hörte mutiert Zustand direkt nicht zu empfehlen ist, so würde ich keine Anleitung oder Einsicht zu schätzen wissen, wie man so richtig tun, um: Wäre so etwas wie das folgende tun wollen.
In diesem Fall { this.props.post.comments.map ((Kommentar) => { Rückgabe }) } wird platziert, wie würden Sie es basierend auf der neuen Revision von ADD_COMMENT entsprechend ändern und auf den Status zugreifen, der von 'ADD_COMMENT' Reducer über mapStateToProps und mapDispatchToProps zurückgegeben wird? –
Ich glaube nicht, dass irgendetwas von Ihrem Code geändert werden müsste, außer dem Reducer, da die Form der Daten unberührt bleibt. Zumindest wollte ich die Form der Daten nicht so verändern, wie Sie es erwartet hatten. –
Ich bin gerade fest, wie ich den Staat innerhalb der mapStateToProps aufrufen sollte, wie zum Beispiel 'this.props.post.comments'. Wo würde ich die Daten normalisieren? Tut mir leid, aber wenn es Ihnen nichts ausmacht, könnten Sie ein komplettes Beispiel zeigen. Ich kann meinen Kopf nicht umschließen. –