Redux 拆分reducer出現的問題

2021-09-02 15:05:10 字數 1469 閱讀 3950

當reducer所處理的state樹太深的話,一般邏輯也會很多,所以要把分支的邏輯拆分成小的reducer,但是這時候會有個問題,小的reducer返回的是完整的state還是片段的state呢?

當然是對應分支下的子state啦。

例如:state長這樣:

export let state: types.istate = ,

text: ,

infor:

}}

然後處理infor分支的reducer

// infor reducer

export let infor: types.ireducer<

types.istate['infor'],

types.iaction> = (state = state.infor, action) =>

case 'reduce_message_p1':

return

case 'reduce_message_p2':

return

default:

return state

}}

處理infor子分支 message的reducer

// infor_message reducer

export let message: types.ireducer<

types.istate['infor']['message'],

types.iaction> = (state = state.infor.message, action) =>

case 'reduce_message_p2':

return

default:

return state

}}

那麼在combinereducers的時候就會忽略乙個問題,大部分人都是以如下方式合併的

// reducers

import * as reducers from './reducers'

// 建立store

export let $store = createstore(combinereducers(reducers))

結果就是執行後,state經過reduce處理,然後subscribe得到的state會多出並列的小的state

檢查錯誤發現,

import * as reducers from '../dev/reducers'

這個'./reducers'檔案內部export暴露的reducers中包含了小的分支reducer。。。 

導致了reduce時,返回了乙個子state,無法合併到主state上,產生了額外的狀態樹,違背了redux的單一狀態原則。

所以,切記不要export小的分支reducer ,只export狀態樹第一層的reducer,或者就是把小的reducer分到別的檔案中。

redux的合併多個reducer

建立store需要傳入reducer createstore reducer,preloadedstate,enhancer reducer是乙個函式,傳入當前state和action,返回新的state prestate,action nextstate當我們需要將多個reducer合併成乙個時 ...

解決redux中state更新是非同步的問題

在開發的過程中突然發現了乙個非常詭異的問題,偽 如下 this.props.dispatch updatedata value 1 console.log this.props.data 2 狀態沒有更新 settimeout 3 狀態發生了更新 於是猜想redux執行action應該是同步的,但是...

Git SourceTree使用時出現的問題

今天重新用git sourcetree新增 出現了很多問題,記錄下 1.安裝了我sourcetree後轉殖專案,貼上 後出現url不正確的情況。解決 尋找了些資料,大仙大部分都是說直接選擇git專案,因為預設是不能使用git的 問題是之前彈出框要輸入使用者名稱和密碼時我隨便輸入了乙個使用者名稱,之後...