2017-05-26 84 views
0

比方说,我要建一个在线的流媒体网站终极版状态:添加或更换

路线/艺术家/名称:(显示艺术家的专辑列表) 当前状态:

{ 
    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: {...}} 
} 

如果我立即切换路线参观另一张专辑,我应该取代国家的 歌曲属性有一个新的列表或只是目前专辑歌曲列表ID添加到它和检索 相关的呢?

在GitHub上丹阿布拉莫夫建议将永不干涸的路由变化状态: https://github.com/reactjs/redux/issues/1235

我很好奇,你们会怎么处理呢?

回答

2

这将是一个难以接受的答案,因为你会发现人们会有自己的偏好,最终,没有单一的正确的答案。这将取决于你的应用程序,它使用的数据和你的要求,但我会反正给你我的意见。

鉴于你有ID,你可以很容易地查找songs使用id作为对象的关键和低的机会(我认为)歌曲数据将在负载之间改变,我会不会担心空它只是添加新的歌曲,因为他们是必需的。

这将使切换回以前装载专辑快得多,这将是为用户更好的。

如果你特别担心的仰视歌曲集的增长表现,你可以使用reselect删除不必要的查找。

事实上,更normalized you can get the data,从我会做的状态不太删除数据。你可以保持每个album用户加载的,不管artist,甚至保持每artist过,只是改变在店里值selectedArtistselectedAlbum

这也将使您在加载数据上更多的选择。例如,如果用户将鼠标悬停在艺术家上3秒钟,或者一旦/artist/name路由被击中,就可以在后台加载歌曲,您可以在后台加载艺术家的所有专辑。

+0

谢谢你,你的回答已经帮我。因此,要恢复这个有这样的状态:{从不同的艺术家和专辑} 歌曲{收集 艺术家:艺术家{收集}, 相册:由不同艺术家的专辑{收集}, 歌曲} 将 成为你的解决方案吗? –

+0

很难说如果不知道你正在建造什么和你的要求,但是是的。尽可能规范化,给自己更多的自由。 –

+0

感谢您的评论,我多看了一会儿,偶然发现了redux-orm。这让我非常感兴趣。对我来说唯一的缺点是需要预先定义模型中的每个字段! –