我在构建对象时遇到了麻烦。我有一个字符串(在本例中称为“SKU”),它通过action
作为action.name
。
我在reducer函数中有一切可用,但是我需要将硬编码的SKU
更改为action.name,但显然这在JS中是不可能的。我已经尝试了action.name
,action['name']
和其他变种,我被卡住了。
有什么工作?任何帮助赞赏!感谢。
这是一些代码,以便您可以看到正在发生的事情:
日期更改时触发的函数...
handleChange(date) {
this.props.addDate(date, this.props.dashboardName);
}
mapDispatch,它连接在组件导出的底部...
const mapDispatchToProps = dispatch => {
return {
addDate: (date, name) => dispatch({
type: 'ACTION_DASHBOARD_ADD_DATE',
date,
name
})
};
};
动作创建者......
export function DashboardDate() {
return {
type: ACTION_DASHBOARD_ADD_DATE
};
}
减速机开关中的情况...
case ACTION_DASHBOARD_ADD_DATE: {
var filter = {};
filter[action.name] = action.date;
return {
...state,
dashboard: {
...state.dashboard,
// Below SKU needs to be the value of action.name
SKU: {
// Below too, action.name
...state.dashboard.SKU,
filter
}
}
};
}
答案 0 :(得分:7)
我不是100%确定您希望代码中出现sku
的位置,但您可以创建一个具有计算属性名称的对象,如下所示:
const obj = {
[action.name]: action.payload
};
console.log(obj); // { "sku": "abcd" }
计算属性名称是ES2015(ES6)功能。
答案 1 :(得分:3)
使用[action.name](计算密钥的语法)
case ACTION_DASHBOARD_ADD_DATE: {
var filter = {};
filter[action.name] = action.date;
return {
...state,
dashboard: {
...state.dashboard,
[action.name]: {
...state.dashboard.SKU,
filter
}
}
};
}