redux應用程序據我所知,適當的方式來維護你的狀態樹是規範化它,儘可能flaten數據並使用combinereducer創建狀態樹的切片。Reactjs Redux應該爲狀態樹中的每個對象創建子縮減器嗎?
例如應用程序有職位和用戶
const rootReducer = combineReducers({
user:userReducer,
posts:postsReducer,
});
const store = createStore(rootReducer);
給出的職位數組保存所有帖子初始化,State.posts
可以像
let initialState = {
byId:{1:{id:1,title:'post1'}},
ids:[1],
meta_data:{unread:1,old:0}
}
現在,如果我們有大約10,000個職位,我們將結束與state.post.ids.length === 10000
這很好,
問題是。由於我們的reducer每返回一個新狀態,所以需要更新它,例如我們需要將meta_data.unread更新爲等於0,我們將返回一個新的Post對象。
return object.assign({},state,{meta_data:{unread:0,old:1}})
它將重新呈現所有使用state.post
樹的屬性的選擇器和組件!
這聽起來像一個問題吧?**所有我們想要的是更新未讀計數器.. 爲什麼重新計算的帖子的所有選擇器和組件?
所以我有這個想法,可能是state.posts也應該組成使用combineReducers,以便每個attr。的帖子應該有一個reducer它自己。
分裂postsReducer成多個
postsMainReducer, ==> deal with adding or removing posts
postMeta_dataReducer, ==> deal with meta_data of posts
singlePostReducer ==> Now this is dynamic !! how can i create such ??
這是正確的?,我加入超過所需的複雜性?
- >有人可以向我們展示已經運行的企業應用程序狀態樹的圖片嗎?所以我們可以從中學習如何組織國家?
只需添加到此;真正的答案是「不做過早優化」。即使在大量數據的情況下,React和Redux也可以非常快速地運行。讓他們做好自己的工作。等到你在試圖解決問題之前見證了一個問題(並且如果你想盡早地見證它,那麼做基準測試)。 – gravityplanx