React-Redux komplexe (tiefe) Zustandsobjekte

Gegeben, mein anfänglicher Redux-Status ist:

const state = {
  currentView: 'ROOMS_VIEW',
  navbarLinks: List([
    {name: 'Rooms', key: 'ROOMS_VIEW'},
    {name: 'Dev', key: ''}
  ]),
  roomListsSelected: {group: 0, item: 0},
  roomLists: [
    {
      name: "Filters",
      expanded: true,
      listItems: [
        { icon: 'images/icon-warning.svg', name: 'Alerts', filter: room => room.hasAlert },
        { icon: 'images/icon-playlist.svg', name: 'In Progress', filter: room => room.progress > 20 },
        { icon: 'images/icon-playlist.svg', name: 'Almost Done', filter: room => room.progress > 90 },
        { icon: 'images/icon-playlist.svg', name: 'Complete', filter: room => room.status === 'complete' },
        { icon: 'images/icon-playlist.svg', name: 'Recently Completed', filter: room => false },
        { icon: 'images/icon-playlist.svg', name: 'All Rooms', filter: room => true }
      ]
    }
  ],
  rooms: List(generateRooms())
}

Ich muss ein Reduzierstück herstellen, das dies tut:

state.roomList[n].expanded = !state.roomList[n].expanded

Ich bin neu in der Verwendung eines Redux-Workflows und der beste Weg, dies zu lösen, besteht darin, roomList zu einem unveränderlichen.js-Objekt zu machen oder Code zu schreiben, um einen tiefen Klon meines Statusobjekts zu erstellen.

Auch in state.roomList werden neue Daten aus zukünftigen Funktionen gespeichert.

Summery / Frage: Was ist der beste Weg, um ein neues Statusobjekt in einem Reduzierer zurückzugeben, wenn Änderungen wie diese tief im Status vorgenommen werden, oder sollte ich die Struktur des Redux-Statusobjekts ändern?

Was ich getan hab Am Ende scheint Immutable der richtige Weg zu sein. Es gibt einige Tricks mit Immutable, um die Renderzeit für das Reagieren zu verkürzen, und es erfüllt alle Projektanforderungen. Außerdem ist es früh genug im Projekt, um eine neue Bibliothek zu verwenden, ohne größere Änderungen vorzunehmen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage