2016-10-10 52 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

结果是一样的。如果这是处理重置子树状态的正确方法,那么可能还有其他问题与我的组件有关......谢谢 –