Redux -子树的复位状态



重置还原存储的子树的正确方法是什么?我对重置整个redux存储不感兴趣,只对它的reducer子树部分感兴趣。

下面是一个示例片段:

//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_suggestion动作被调度,我突然得到未定义的道具在我的一些组件和以下错误:Warning .js:36 Warning: performUpdateIfNecessary:意外的批号(当前为161,等待157)

我不是100%确信我做的是正确的。有人能确认问题是否与我的减速器,或沿着我的组件生命周期方法某处?

谢谢!

您意外地将initialState嵌套在名为'initialState '的键下。你只需要:

case CLEAR_SUGGESTIONS : {
  return initialState
}

不需要复制initialState,因为存储状态是不可变的。

您创建的对象将看起来像这样:

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

你想要的是:

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

相关内容

  • 没有找到相关文章

最新更新