带有 object.assign 的 Redux reducer 在同名的顶部键内创建键

马特乌斯·米西亚克

我试图从我在 Medium 上学到的关于 Redux 的简单示例转移到使用 object.assign 或扩展运算符正确修改不可变状态。但是,在我尝试过之后,它会在原始状态键中创建一个具有相同名称的键。Fe 我有一个状态键searchPage: 1,在转换减速器后我得到了searchPage: {searchPage: 1}. 我敢打赌这很愚蠢,但我是根据 Redux 文档(我只是假设)做到的。我试过 object.assign 和扩展运算符,它们具有相同的结果。这是我的旧减速机:

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 对象将所有减速器的初始状态设置为一个对象作为默认值。但是,扩展运算符语法现在与以前完全相同,即将初始状态键插入 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
  }
}
马特乌斯·米西亚克

刚刚得到了这个旧问题的更新。现在,当我看它时,它很明显。在减速器中,初始化时state = initialState.searchPage它应该只是state = initialState,并且整个减速器应该只是一个函数,以便我可以利用 switch 语句的用例。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章