Javascript redux阵列未正确更新

Javascript redux阵列未正确更新,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,在redux中,我有一个selectedItems和changedItems selectedItems:[“元素0”、“元素1”、“元素2”] changedItems:[“元素6”、“元素7”、“元素8”] this.props.addItem(this.props.changedItems)}>save 我有一个按钮,可以触发添加项操作,但这会将changedItems数组中的1个元素而不是全部3个元素推入selectedItems数组,并且我希望它在完成此操作后完全删除selectedI

在redux中,我有一个
selectedItems
changedItems

selectedItems:[“元素0”、“元素1”、“元素2”]

changedItems:[“元素6”、“元素7”、“元素8”]

this.props.addItem(this.props.changedItems)}>save

我有一个按钮,可以触发
添加项
操作,但这会将
changedItems
数组中的1个元素而不是全部3个元素推入
selectedItems
数组,并且我希望它在完成此操作后完全删除
selectedItems
数组中的任何现有元素

如何将
changedItems
数组中的所有元素推入
selectedItems
数组,并覆盖
selectedItems
数组中的现有项

actions.js

export const addItem = (item) => ({
  type: ADD_ITEM,
  item,
})

export const removeItem = (item) => ({
  type: REMOVE_ITEM,
  item,
})

export const clearItems = () => ({
  type: CLEAR_ITEMS,
})


export const addChangedItem = (item) => ({
  type: ADD_CHANGED_ITEM,
  item,
})

export const removeChangedItem = (item) => ({
  type: REMOVE_CHANGED_ITEM,
  item,
})
import {
  ADD_ITEM, CLEAR_ITEMS, REMOVE_ITEM,
} from '../Constants'

const selectedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_ITEM:
      return state.filter((item) => item !== action.item)
    case CLEAR_ITEMS:
      return []
    default:
      return state
  }
}

export default selectedItemReducer
import {
  ADD_CHANGED_ITEM, REMOVE_CHANGED_ITEM,
} from '../Constants'

const changedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_CHANGED_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_CHANGED_ITEM:
      return state.filter((item) => item !== action.item)
    default:
      return state
  }
}

export default changedItemReducer
selectedItemReducer.js

export const addItem = (item) => ({
  type: ADD_ITEM,
  item,
})

export const removeItem = (item) => ({
  type: REMOVE_ITEM,
  item,
})

export const clearItems = () => ({
  type: CLEAR_ITEMS,
})


export const addChangedItem = (item) => ({
  type: ADD_CHANGED_ITEM,
  item,
})

export const removeChangedItem = (item) => ({
  type: REMOVE_CHANGED_ITEM,
  item,
})
import {
  ADD_ITEM, CLEAR_ITEMS, REMOVE_ITEM,
} from '../Constants'

const selectedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_ITEM:
      return state.filter((item) => item !== action.item)
    case CLEAR_ITEMS:
      return []
    default:
      return state
  }
}

export default selectedItemReducer
import {
  ADD_CHANGED_ITEM, REMOVE_CHANGED_ITEM,
} from '../Constants'

const changedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_CHANGED_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_CHANGED_ITEM:
      return state.filter((item) => item !== action.item)
    default:
      return state
  }
}

export default changedItemReducer
changedItemReducer.js

export const addItem = (item) => ({
  type: ADD_ITEM,
  item,
})

export const removeItem = (item) => ({
  type: REMOVE_ITEM,
  item,
})

export const clearItems = () => ({
  type: CLEAR_ITEMS,
})


export const addChangedItem = (item) => ({
  type: ADD_CHANGED_ITEM,
  item,
})

export const removeChangedItem = (item) => ({
  type: REMOVE_CHANGED_ITEM,
  item,
})
import {
  ADD_ITEM, CLEAR_ITEMS, REMOVE_ITEM,
} from '../Constants'

const selectedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_ITEM:
      return state.filter((item) => item !== action.item)
    case CLEAR_ITEMS:
      return []
    default:
      return state
  }
}

export default selectedItemReducer
import {
  ADD_CHANGED_ITEM, REMOVE_CHANGED_ITEM,
} from '../Constants'

const changedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_CHANGED_ITEM:
      return [
        ...state,
        action.item,
      ]
    case REMOVE_CHANGED_ITEM:
      return state.filter((item) => item !== action.item)
    default:
      return state
  }
}

export default changedItemReducer

如果
changedItems
保证始终是一个数组,则应在reducer中返回这些值。从
changedItemReducer
的外观来看,情况似乎就是这样

const selectedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_ITEM:
      return action.item;
    case REMOVE_ITEM:
      return state.filter((item) => item !== action.item)
    case CLEAR_ITEMS:
      return []
    default:
      return state
  }
}
如果不总是数组,则首先检查。如果是数组,则返回它;如果不是数组,则将项放入数组并返回它

const selectedItemReducer = (state = [], action) => {
  switch (action.type) {
    case ADD_ITEM:
      return Array.isArray(action.item) ? action.item : [item];
    case REMOVE_ITEM:
      return state.filter((item) => item !== action.item)
    case CLEAR_ITEMS:
      return []
    default:
      return state
  }
}
在这两种情况下,在保存(返回)新的“已更改项”时,您都是在“丢弃”旧状态