遷移到 Redux
Redux 不是一個整體的框架,而是一系列的介面和一些可以讓它們一起合作的 functions。甚至你大多數的「Redux 程式碼」都不會用到 Redux API,因為你大部份的時間都會是在撰寫 function。
這讓遷入還是遷出 Redux 都很簡單。 我們不想要把你綁在上面!
從 Flux
Reducer 擷取了 Flux Store 的「本質」,所以無論你是使用 Flummox、Alt、傳統 Flux,或任何其他的 Flux library,漸漸的遷移一個已存在的 Flux 專案到 Redux 都是可以的。
同樣的你也可以反向的依照一樣的步驟,來從 Redux 遷移到上述任何的這些 library。
你的流程會看起來像這樣:
建立一個叫做
createFluxStore(reducer)
的 function,它用來從 reducer function 建立一個相容於你現存應用程式的 Flux store。從 Redux 內部來說,它可能看起來很像createStore
(原始碼) 的實作。它的 dispatch handler 應該只針對 action 去呼叫reducer
、儲存 state 變化、並發送 change 事件。這讓你可以漸漸的把應用程式中的每一個 Flux Store 改寫成 reducer,但仍然 export
createFluxStore(reducer)
,所以應用程式的剩餘部分並不會察覺到有什麼事發生,也只會看到 Flux store。當你改寫了你的 Store 後,你將會發現你需要避免某些 Flux 的反模式,例如:在 Store 裡面抓取 API、或在 Store 裡面觸發 action。一旦你把它們改寫成基於 reducer,你的 Flux 程式碼會更容易去了解!
當你已經把所有的 Flux Store 都改成基於 reducer 之上去實作,你可以把 Flux library 置換成一個單一的 Redux store,並藉由
combineReducers(reducers)
來把你已經有的這些 reducer 結合成一個。現在只剩下要移植 UI 來使用 react-redux 或其他類似的東西。
最後,你可能會想要開始使用一些 Redux 特有的功能像是 middleware ,來進一步簡化你的非同步程式碼。
從 Backbone
Backbone 的 model 層跟 Redux 有很大的差異,所以我們不建議把它們混在一起。如果可能的話,最好從頭開始重寫你的應用程式的 model 層而不是把 Backbone 連接到 Redux。然而,如果重寫是不可行的,那你可以使用 backbone-redux 來漸漸的遷移,並維持 Redux store 跟 Backbone model 和 collection 之間的同步。