在reducer中使用变量作为对象键

Aps*_*wak 3 javascript reactjs redux

我在构建对象时遇到了麻烦.我有一个字符串(称为"SKU"在这个例子中)和它的透进来action的action.name.

我在reducer函数中有所有可用但我需要将硬编码更改SKU为action.name,但显然这在JS中是不可能的.我试过了action.name,action['name']其他的变化和我卡住了.

有什么工作?任何帮助赞赏!谢谢.

这是一些代码,所以你可以看到发生了什么:

日期更改时触发的函数...

handleChange(date) {
  this.props.addDate(date, this.props.dashboardName);
}
Run Code Online (Sandbox Code Playgroud)

mapDispatch连接在组件导出的底部...

const mapDispatchToProps = dispatch => {
  return {
    addDate: (date, name) => dispatch({
      type: 'ACTION_DASHBOARD_ADD_DATE',
      date,
      name
    })
  };
};
Run Code Online (Sandbox Code Playgroud)

行动创造者......

export function DashboardDate() {
  return {
    type: ACTION_DASHBOARD_ADD_DATE
  };
}
Run Code Online (Sandbox Code Playgroud)

减速机开关的情况......

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
          }
        }
      };
    }
Run Code Online (Sandbox Code Playgroud)

Aro*_*ron 8

我不是100%确定您希望在代码中sku出现的位置,但您可以创建一个具有计算属性名称的对象,如下所示:

const obj = {
    [action.name]: action.payload
};

console.log(obj); // { "sku": "abcd" }
Run Code Online (Sandbox Code Playgroud)

计算属性名称是ES2015(ES6)功能.


小智 6

使用 [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
      }
    }
  };
}
Run Code Online (Sandbox Code Playgroud)