2016-07-13 122 views
3

我有这个initialState在我的终极版商店:对象分配与动态变量

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

active是一个对象。

现在我有一个动作是应该追加或属性添加到activedata财产,像这样:

[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

尝试这样的:

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中,'data'已经是一个对象,所以不需要用'{}'来修饰它。 – Jamiec

1

我想一个计算出来的属性名称可能工作。

未经测试:

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