Dato il mio stato Redux iniziale è:React-Redux di oggetti complessi (profondità) Stato
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())
}
ho bisogno di fare un riduttore che fa questo:
state.roomList[n].expanded = !state.roomList[n].expanded
Sono nuovo di utilizzare un Redux il flusso di lavoro e il modo migliore per risolvere questo problema è rendere roomList un oggetto immutable.js o scrivere del codice per creare un clone profondo del mio oggetto di stato.
Anche state.roomList avrà nuovi dati trasmessi da funzionalità future.
Summery/Domanda: Qual è il modo migliore per restituire un nuovo oggetto di stato in un riduttore quando si effettuano modifiche come questo in profondità nello stato o si deve modificare la struttura dell'oggetto stato Redux?
Cosa ho fatto Alla fine, Immutable sembra la strada da percorrere. Ci sono alcuni trucchi con Immutable per ridurre i tempi di rendering e soddisfa tutti i requisiti del progetto. Inoltre è abbastanza presto nel progetto di utilizzare una nuova libreria senza apportare modifiche importanti.
Hai una domanda? –
Qual è il modo migliore per restituire un nuovo oggetto stato in un riduttore quando si apportano modifiche come questo in profondità nello stato, o devo cambiare la struttura dell'oggetto stato Redux? –