Пример (вы можете пропустить это)
Скажем, есть приложение, которое помогает людям организовать свою музыкальную библиотеку. Библиотека содержит Albums
, каждый Album
содержит отдельный Songs
, каждый Song
содержит популярные Quotes
, которые появляются в этой песне. Для каждого из этих объектов имеется больше информации, поэтому объект Album
содержит информацию об исполнителе, году и т. Д. Пользователи могут редактировать все это.
Моя проблема
Я изо всех сил пытаюсь найти наиболее эффективную стратегию для преобразования этого в Redux. Я думал о вложении всего, как albums: [ { title, songs: [etc. etc.]}, {}]
Итак, у нас есть все данные в одном объекте. Однако, если кто-то нажимает на альбом, песню и цитату, мои редукторы каким-то образом должны будут знать, что отображать и чем занимается пользователь. Я могу придумать 2 подхода к этому:
Подход 1
{
list: [] //contains all albums, songs, quotes as outlined above
currentAlbum: albumId
currentSong: songId
currentQuote: quoteId
}
Подход 2
Разные части состояния содержат не только идентификаторы, но и весь объект:
listReducer: [] // holds the list, same as above
currentAlbumReducer: { id: albumid12312, title: "The Eminem Show", etc... }
currentSongReducer: { id: songid4545, song_title: "I believe", etc... }
currentQuoteReducer: { id: 12312, quote: "I'm Slim Shady", etc... }
При таком подходе я всегда перемещал вещи из списка в соответствующие «текущие» редукторы, и если кто-то что-то здесь меняет, я потом в какой-то момент обновляю списки.
Однако, это кажется немного излишним. В то же время, может ли этот подход быть быстрее, чем хранить все в одном объекте?
Буду признателен за совет, какой метод лучше и почему, и есть ли другие способы обработки состояния, которые мне не приходили в голову.