我正在尝试从我在 Medium 上学到的关于 Redux 的简单示例转变为使用 object.assign 或扩展运算符正确修改不可变状态。但是,在我尝试过之后,它会在原始状态键中创建一个具有相同名称的键。Fe 我有一个状态键searchPage: 1
,在转换减速器后我得到了searchPage: {searchPage: 1}
. 我打赌这很愚蠢,但我是根据 Redux 文档(我只是假设)这样做的。我已经尝试过 object.assign 和 spread 运算符,它们具有相同的结果。这是我的旧减速器:
export function searchPage(state = 1, action) {
switch (action.type) {
case 'SET_SEARCH_PAGE':
return action.searchPage
default:
return state
}
}
以及带有扩展运算符的新功能:
export function searchPage(state = 1, action) {
switch (action.type) {
case 'SET_SEARCH_PAGE':
return { ...state, searchPage: action.searchPage }
default:
return state
}
}
更新现在,我使用 initialState 对象将所有 reducer 的初始状态设置为默认对象。但是,扩展运算符语法现在与以前完全相同,即在 searchPage 键中插入初始状态键,因此我仍然在我的 searchPage 键中使用对象而不是数字。这是更新的代码,我不知道我是否朝着正确的方向前进:
const initialState = {
posts: [],
postsHasErrored: false,
postsIsLoading: false,
searchString: '',
searchCategories: [],
searchPage: 10
}
export function searchString(state = initialState.searchString, action) {
console.log(state)
switch (action.type) {
case 'SET_SEARCH_STRING':
return action.searchString
default:
return state
}
}
export function searchCategories(state = initialState.searchCategories, action) {
switch (action.type) {
case 'SET_SEARCH_CATEGORIES':
return action.searchCategories
default:
return state
}
}
export function searchPage(state = initialState.searchPage, action) {
switch (action.type) {
case 'SET_SEARCH_PAGE':
return { ...state, searchPage: action.searchPage }
default:
return state
}
}