重置还原存储的子树的正确方法是什么?我对重置整个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
}
}