2017-05-26 85 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。這讓我非常感興趣。對我來說唯一的缺點是需要預先定義模型中的每個字段! –