2017-08-20 5 views
1

私はreduxには新しく、データを複製せずに良好な状態のシェイプを実装する方法を把握するのは難しく、更新が必要な場合に備えて、それは真実の単一の源を否定するでしょう。データの重複のない状態の再構成

我々は、ユーザプロファイルおよびAPIサーバからの投稿をフェッチ:

{ "user": { "username": "placeholder", "bio": "It's my bio", "profileImage": "http://via.placeholder.com/350x150", "isViewerFollowing": false } } www.api.com/users/placeholder { "posts":[{ "id": "1", "caption":"caption placeholder", "image":"http://via.placeholder.com/1000x1000", "createdAt": "2017-08-18T03:22:56.637Z", "updatedAt": "2016-08-18T03:48:35.824Z", "isLikedbyViewer": false, "likesCount": 0, "author": { "username": "placeholder", "bio": "It's my bio", "profileImage": "http://via.placeholder.com/350x150", "isViewerFollowing": false, } }, { "id": "2", "caption":"caption placeholder", "image":"http://via.placeholder.com/1000x1000", "createdAt": "2017-08-18T03:22:56.637Z", "updatedAt": "2016-08-18T03:48:35.824Z", "isViewerLiked": false, "likesCount": 0, "author": { "username": "placeholder", "bio": "It's my bio", "profileImage": "http://via.placeholder.com/350x150", "isViewerFollowing": false, } }], "postsCount": 2 }

www.api.com/posts?author=placeholder

たとえば、ユーザーと投稿のためのリデューサーが別にあり、ユーザーがユーザー/作成者に従うことを望んでいる場合、2つのレデューサーの情報を更新する必要があります。だから私の最終的な質問は、誰かがこの特定の例のような良い状態の形になると私に何か示唆することができるでしょうか?

ありがとうございます!

答えて

1

Reduxの状態を正規化する必要があります。投稿ごとに著者オブジェクト全体を保存するのではなく、authorIdを保存するだけです。

あなたは、セレクタを作成することができます自分の著者のデータを持つすべての記事を検索するために、あなたはReduxの状態のposts支店で郵便物を持っている場合、あなたもauthorsブランチの関連著者を持っていることを確認しているので:

export function getPosts(reduxState) { 
    return reduxState.posts.map(post => { 
    const author = reduxState.authors.find(a => a.id === post.authorId); 
    return { 
     ...post, 
     author 
    }; 
    }); 
} 
関連する問題