Redux状态:添加或替换

时间:2017-05-26 20:22:27

标签: javascript redux state

假设我正在建立一个在线流媒体网站

路线/艺术家/姓名:(显示艺术家专辑的列表) 现状:

{ 
  artist: 'Eminem', 
  albums: [{name: 'MMLP', songs: [listofsongids]}, {name: 'Relapse', songs: [...]}]
}

路线/艺术家/姓名/专辑/ albumid :(显示专辑歌曲列表) 现状:

{ 
  artist: 'Eminem', 
  albums: [{name: 'MMLP', songs: [listofsongids]}, {name: 'Relapse', songs: [...]}], 
  songs: {song1: {lyrics: '...', ...}, song2: {...}}
}

如果我立即切换路线去访问另一张专辑,我应该更换 具有新列表的州的歌曲属性或只是添加到它并检索 当前专辑歌曲列表ids的相关内容?

在github上,丹·阿布拉莫夫建议永远不要在路线变化时清空状态: https://github.com/reactjs/redux/issues/1235

我很好奇你们将如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

这将是一个难以接受答案的问题,因为你会发现人们会有任何一种偏好,最后,没有一个正确的答案。这取决于您的应用程序,它使用的数据以及您的要求,但无论如何我都会给您我的意见。

假设你有id并且你可以使用songs作为对象键轻松查找id,并且很少有机会(我假设)歌曲数据将在加载之间发生变化,I我们不会担心将其清空,只需添加新歌即可。

这样可以更快地切换回以前加载的相册,这对用户来说更好。

如果您在收集增长时特别担心查看歌曲的效果,可以使用reselect删除不必要的查找。

事实上,normalized you can get the data越多,从我所处的状态中移除的数据就越少。您可以保留用户已加载的每个album,无论artist如何,甚至保留每个artist,只需更改商店中selectedArtistselectedAlbum的值}。

这也可以为您提供有关加载数据的更多选项。例如,如果用户将鼠标悬停在艺术家上3秒钟,或者在/artist/name路线被击中后立即开始在后台加载歌曲,则可以在后台加载艺术家的所有专辑。