2017-07-26 2 views
0

Ich habe einen Druckminderer, dass zuerst ohne das Buch eine Liste der Bücher Array Objekte bekommt Kopien Eigentum zählen, und als es die Anzahl der Kopien für jedes Buch erhaltenIn redux Minderer wie 1 Objekt innerhalb Array-Objekt aktualisieren

const bookList= (state = [], action) => { 
    switch (action.type) { 
     case 'BOOKS_REQUEST_SUCCEEDED': 
      return Object.assign({}, state, action.payload); 
     case 'BOOKS_COUNT_REQUEST_SUCCEEDED': 
      return updateBookCopiesCount(state, action); 
     default: 
      return state 
    } 
} 

const updateBookCopiesCount = (state, action) => { 
    const newState = state.map((book) => { // updating only the book copies count 
     if (book.Id === action.payload.Id) { 
      return { ...book, 
       copiesCount: action.payload.copiesCount 
      }; 
     } 
     return book; 
    }); 
    return newState; 
} 

meine Frage ist, was ist der richtige redux Ansatz ist: soll ich jedes Mal das gesamte Array mit allen Objekten für jedes copiesCount Update zu kopieren, oder ist es in Ordnung, nur das Objekt zu kopieren, die mit der neuen Eigenschaft geändert wurden

Vielen Dank im Voraus

Antwort

0

Die aktuelle updateBookCopiesCount Funktion ist korrekt. Sie müssen jede Ebene der Verschachtelung kopieren, die aktualisiert werden muss, aber nur, was aktualisiert werden muss. So müssen Sie state (kopieren, die über state.map() getan wird, und Sie müssen kopieren nur die ein Objekt innerhalb des Arrays, die aktualisiert werden muss. Alle anderen Objekte zurückgegeben werden sollten, wie sie ist.

Weitere Informationen finden Sie im Abschnitt Structuring Reducers - Immutable Update Patterns der Redux-Dokumentation

1

Redux erfordert nur, dass Sie eine neue Werteinstanz zurückgeben müssen, wenn Änderungen an den Daten vorgenommen wurden, dh es wird die Unveränderlichkeit erzwungen. Und es erzwingt nicht die besondere Form Ihres Reduzierstückes. Also, Ihre Frage ist effektiv nicht über Redux-Ansatz, sondern über allgemeine Javascript-Task, wie Datentransformation in unveränderlicher Weise durchzuführen.

Aus meiner Sicht ist Ihr Code für diese spezielle Aufgabe absolut normal.

Verwandte Themen