2016-07-13 6 views
3

У меня есть эта initialState в моем Redux магазине:объект назначения с динамической переменной

const initialState = { 
    isFetching : false, 
    active  : {} 
} 

Где active является объектом.

Теперь у меня есть действие, которое должно на добавление или добавить свойство active «s data собственности, например, так:

[DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => { 
    return Object.assign({}, state, { 
     isFetching : false, 
     active  : Object.assign({}, active, {data[action.key]: action.data}) 
    }) 
} 

Как вы можете видеть, data[action.key] не допускается. Как мне это сделать?

ответ

4

Try с этим:

active: Object.assign({}, active, { 
    data: Object.assign({}, data, { 
    [action.key]: action.data 
    }) 
}) 
0

Построить объект в первую очередь, используя квадратные скобки, нотации использовать строку в качестве имени свойства:

var data = {}; 
data[action.key] = action.data; 

затем использовать что вновь созданный объект:

[DASHBOARD_TEMPLATE_DATA_RECEIVE]: (state, action) => { 
    return Object.assign({}, state, { 
     isFetching : false, 
     active  : Object.assign({}, active, data) 
    }) 
} 
+0

Я думаю, что это должно быть: 'активен: Object.assign ({}, активный, {данные})' –

+0

@JoeyHipolito, возможно, если это что-то конкретное для Redux, для которых они не знакомы. Но в ванильном javascript «данные» уже являются объектами, поэтому нет необходимости обманывать его с помощью '{}'. – Jamiec

1

Я бы предположил, что вычисленное имя свойства может работать.

Непроверенные:

active: Object.assign({}, active, {[data[action.key]]: action.data})