2017-08-20 59 views
1

我是redux的新手,很難掌握如何在不重複數據的情況下實現良好的狀態形狀,以防我需要更新數據,而且幼稚的方式是在少數地方更新,但是這會否定單一的事實根源。Redux狀態形狀沒有數據重複

我們獲取用戶的個人資料和API服務器的帖子:

www.api.com/users/placeholder { "user": { "username": "placeholder", "bio": "It's my bio", "profileImage": "http://via.placeholder.com/350x150", "isViewerFollowing": false } } www.api.com/posts?author=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 }

例如,我們爲用戶和帖子分別設置了reducer,並且用戶希望關注用戶/作者,那麼我們需要更新兩個reducer中的信息。所以我的最後一個問題是,是否有人會提示我在這個特定的例子中,狀態的狀態如何?

謝謝!

回答

1

你應該規範你的Redux狀態:不要爲每篇文章保存整個作者對象,你應該保存authorId。

既然你保證,當你在你的終極版狀態的posts分支後的對象,還必須在authors分公司相關作者,檢索所有的職位與他們的作者的數據,你可以創建一個選擇:

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