Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 如何使用ES6将对象添加到数组中。。。方法?_Reactjs_Ecmascript 6 - Fatal编程技术网

Reactjs 如何使用ES6将对象添加到数组中。。。方法?

Reactjs 如何使用ES6将对象添加到数组中。。。方法?,reactjs,ecmascript-6,Reactjs,Ecmascript 6,我知道如何使用推送方法: import * as types from '../constants/ActionTypes' const initialState = { designBox: [], } import * as types from '../constants/ActionTypes' const initialState = { designBox: [], } export default function(state = initialState, ac

我知道如何使用推送方法:

import * as types from '../constants/ActionTypes'

const initialState = {
  designBox: [],

}

import * as types from '../constants/ActionTypes'
const initialState = {
  designBox: [],

}

export default function(state = initialState, action) {
  switch (action.type) {
  case types.CREATE_DESIGN_BOX:
    let newState = Object.assign({}, state);
    newState.designBox.push(action.payload)
    return newState

  default:
    return state
  }
}
但是我不知道如何使用
方法

现在我的代码出现问题,designBox无法添加对象,
它只有一个项目,因为它刚刚被新的
action.payload

import * as types from '../constants/ActionTypes'

const initialState = {
  designBox: [],

}

export default function(state = initialState, action) {
  switch (action.type) {
  // action.payload format -> { width:200,height:300,text:'abc'}
  case types.CREATE_BOX:
    return {
      ...state,
      designBox: [action.payload]
    }
  default:
    return state
  }
}
我怎样才能做到这一点与。。。方法

使用数组析构函数

case types.CREATE_BOX:
    return {
      ...state,
      designBox: [...state.designBox,action.payload]
    }

无法使用对象扩展来操纵关键点,只能完全替换它们。但是,在覆盖关键点时,可以引用原始对象:

return {
  ...state,
  designBox: state.designBox.concat(action.payload)
}

同时,在阵列中展开阵列:

return {
  ...state,
  designBox: [...state.designBox, action.payload]
}
此外,您的状态不需要是对象。如果它只包含一个数组,请将其设置为数组:

const initialState = [];

initialState是数组而不是对象,这是一种常见的方式吗?如果它只有一个键,并且该键的值是数组,那么就没有理由在以后将要访问的内容嵌套到比需要更深的级别。