2017-06-01 41 views
1

想一想:我在Redux的數據建模我的商店

我有一個應用程序,它最終會變得非常大。它是一個儀表盤,可以讓你訪問各種實用程序,其中一個是待辦事項應用程序。

如果我只是要建立只是一個待辦事項應用程序,然後我的狀態對象看起來像這樣:

{ todos:[], completed:false, todoInput:''};

todoInput將被捆綁到一個窗體域,並在點擊添加,它會更改todos數組並切換completed字段。所以我的combineReducers()函數看起來像這樣。

combineReducers({todos,completed,todoInput});

,因爲所有的狀態是相關的待辦事項應用程序,因爲僅僅是一個待辦事項應用這將使感。

現在,因爲我建立一個更爲複雜的應用程序,它也有一個待辦事項應用程序,這是怎麼了我的狀態將有可能是這樣的:

{ 
    otherState:'',evenMoreState:[]',evenMore:{}, 

    todo:{ todos:[], completed:false, todoInput:''} 
} 

正如你可以看到我已經分離的待辦事項到一個單獨的對象現在,它是封裝和更有組織的。所以我有兩個問題。

1)這是個好主意嗎?這似乎是合乎邏輯的舉動,因爲我的應用程序的規模會增大,我不希望所有的狀態都作爲主狀態對象的屬性浮動。我是否正確地處理了這個問題?

2)我的聯合減速器(據我所知)不能採取嵌套的對象。所以它現在看起來像這樣。

combineReducers({ otherState,evenMoreState,evenMore,todo})

所以現在我減速的組合物將具有處理待辦事項狀態機內部工作要做。有沒有更好/不同的方式來做到這一點?

謝謝

回答

2

是的,你絕對是在正確的軌道上。另外值得一提的是,你可以使用combineReducers多次,如:

const rootReducer = combineReducers({ 
    otherState : otherStateReducer, 
    todos : combineReducers({ 
     todos : todosReducer, 
     completed : todosCompletedReducer, 
     todoInput : todoInputReducer 
    }) 

整體todos部分可以分別定義,和進口,如果需要在頂層combineReducers呼叫引用。 });

您可能想要閱讀Redux docs section on "Structuring Reducers"以獲取有關組織減速器邏輯的方法的更多信息,以及Redux FAQ on organizing nested state。另外,我的React/Redux links listRedux TechniquesRedux Architecture部分有關於構建真實世界Redux應用程序的各種文章的鏈接。

+1

ahh感謝您的回購(將通過它挖掘!),第二次調用combineReducers正是我所期待的。 – JohnSnow