2017-05-26 29 views
0

を追加または交換の私は、ルート/アーティスト/名 Reduxの状態:

オンラインストリーミングサイト

を構築していましょう:(アーティストのアルバムのリストを表示する) 現在の状態:

{ 
    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

これは、人が自分の好みをどちらかの方法で持っていることがわかるように、最終的にはという正しい1つではなく、答えがであるという回答を受け入れるのが難しい問題です。それはあなたのアプリ、それが使用するデータ、およびあなたが行っている要件に依存しますが、とにかく私はあなたに私の意見を与えます。

idをオブジェクトのキーとして簡単に使用して、idを簡単に検索できます。また、読み込み間で曲データが変更される可能性は低いと思います新しい曲を必要に応じて追加するだけです。

これにより、以前に読み込まれたアルバムに戻ってより早く切り替えることができ、ユーザーにはより良いものになります。

特に、コレクションの成長に合わせて曲を検索するパフォーマンスが心配な場合は、reselectを使用して不要なルックアップを削除できます。

実際には、normalized you can get the dataが多いほど、状態からデータを削除する頻度は低くなります。 artistに関係なく、albumのユーザーがロードされていることを保ち、さらにすべてartistを保持し、selectedArtistselectedAlbumの値を店舗で変更するだけでも可能です。

これにより、データをロードする際のオプションも増えます。たとえば、アーティストが3秒間マウスをホバーすると、アーティストのすべてのアルバムを読み込むことができます。または、/artist/nameのルートに当たったらすぐにバックグラウンドで曲を読み込むことができます。

+0

ありがとう、あなたの答えは私を助けてくれました。 { アーティスト::{アーティストの集合}、 アルバム:{異なるアーティストのアルバムのコレクション}、 歌:異なるアーティストやアルバムからの曲の{コレクション} } うだから、これはこのような状態を有する再開しますあなたのgotoソリューションですか? –

+0

あなたが構築しているものと要件を正確に把握せずに言うのは難しいですが、ええ。できるだけ多くの自由を与えるためにできるだけ正規化してください。 –

+0

あなたのコメントのおかげで、もう少し周りを見てきました。それは私に本当に興味を持った。私のための唯一の欠点は、モデルのすべてのフィールドを事前定義する必要があることです! –