2016-10-10 70 views
0

重置REDX子庫的子樹的正確方法是什麼?我對重置整個redux商店不感興趣,但它只是reducer子樹部分。Redux - 子樹的重置狀態

下面是一個例子片段:

//initial state 
const initialState = { 
    isFetching: false, 
    error: '', 
    page: 0 
} 

//reducer for suggestions store 
export default function suggestions (state = initialState, action) { 
    switch (action.type) { 
     case FETCHING_SUGGESTIONS : { 
      return { 
       ...state, 
       isFetching: true 
      } 
     } 
     case FETCHING_SUGGESTIONS_SUCCESS : { 
      return { 
       ...state, 
       [action.suggestion.suggestionId] : action.suggestion 
      } 
     } 
     case FETCHING_SUGGESTIONS_ERROR : { 
      return { 
       ...state, 
       isFetching: false, 
       error: "Error in fetching suggestions" 
      } 
     } 
     case CHANGE_PAGE : { 
      return { 
       ...state, 
       page: action.page 
      } 
     } 
     case ADD_SUGGESTION : { 
      return { 
       ...state, 
       [action.suggestion.suggestionId]: action.suggestion 
      } 
     } 
     case CLEAR_SUGGESTIONS : { 
      return { 
       initialState 
      } 
     } 
     default : 
      return state 
    } 
} 

我認爲這會工作,但每當CLEAR_SUGGESTIONS行動出動,我突然得到了一個未定義的道具在我的一些部件,並具有以下錯誤: 警告。 js:36警告:performUpdateIfNecessary:意外的批號(當前161,正在等待157)

我不是100%自信我正確地做到了這一點。有人可以確認問題出在我的reducer上,還是在我的組件生命週期方法的某個地方?

謝謝!

回答

1

你是一個名爲「初始化狀態項下意外築巢的初始化狀態。你只是想:

case CLEAR_SUGGESTIONS : { 
    return initialState 
} 

有沒有需要複製的初始化狀態,因爲商店的狀態是不可改變的。

+0

我明白了,你是對的。我以前也測試過這個。我開始相信,當這個redux狀態子樹被重置時,我的組件沒有正確更新有問題。謝謝 –

1

創建看起來像這樣的對象:

{ 
    initialState: { 
    isFetching: false, 
    error: '', 
    page: 0 
    } 
} 

你想要的是這樣的:

case CLEAR_SUGGESTIONS : { 
    return { 
    ...initialState 
    } 
} 
+0

結果是一樣的。如果這是處理重置子樹狀態的正確方法,那麼可能還有其他問題與我的組件有關......謝謝 –