2016-10-03 89 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

如果它只有一個鍵有一個數組作爲值,那麼沒有理由將您想要訪問的內容嵌入到比所需更深的層次。 – Scarysize

0

使用數組的析構函數

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

有沒有辦法使用對象擴散到操作鍵,只替換它們完全。但是,您可以參考原來的對象,當你覆蓋鍵:

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