2016-10-03 5 views
0

私がプッシュ方式で行う方法を知っている:ES6 ...メソッドで配列にオブジェクトを追加するには?

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 
    } 
} 

によって上書きので、それだけで、一つのアイテムを持っています?

答えて

1

スプレッド:

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

はまた、あなたの状態がオブジェクトである必要はありません。配列だけが含まれている場合は、配列にしてください:

const initialState = []; 
+0

これは一般的な方法ですか? – user2492364

+0

値として配列を持つキーが1つしかない場合は、必要以上にレベルにアクセスしたいものをネストする必要はありません。 – Scarysize

0

使用アレイデストラクタ

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

はそれらを完全に置き換える、キーを操作するためのオブジェクトの広がりを使用して方法はありません。あなたが鍵をオーバーライドしているときは、しかし、元のオブジェクトを参照することができますだけでなく、配列

return { 
    ...state, 
    designBox: state.designBox.concat(action.payload) 
} 
関連する問題