Учитывая мое начальное состояние редукции:
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())
}
Мне нужно сделать редуктор, который делает это:
state.roomList[n].expanded = !state.roomList[n].expanded
Я новичок в использовании рабочего процесса Redux, и лучший способ решить это - сделать roomList объектом immutable.js или написать некоторый код, чтобы сделать глубокий клон моего объекта состояния.
Также state.roomList будет получать новые данные от будущих функций.
Summery/Question:. Каков наилучший способ вернуть новый объект состояния в редуктор при внесении таких изменений, как это глубоко в состояние, или мне нужно изменить структуру объекта состояния Redux?
Что я сделал. В конце концов, Неизменяемый, кажется, путь. Есть несколько трюков с неизменяемым, чтобы уменьшить время рендеринга, и он отвечает всем требованиям проекта. Также в проекте достаточно рано использовать новую библиотеку без существенных изменений.