8

What kind of ES6 syntax is this?

{
  [ActionTypes.Repo](state, { username, res }) {
    /* ... */
  },

  [ActionTypes.Repo2](state, { username, res }) {
    /* ... */
}

Taken from : https://github.com/quangbuule/redux-example/blob/master/src/js/reducers/Repo.js

4

1 回答 1

24

这些是工作中的方法定义计算属性名称解构

方法定义提供了一种简洁的方式来创建包含函数的属性:

// before
var obj = {
  foo: function() {}
};

// now
var obj = {
   foo() {}
};

class这与在定义中创建方法的语法相同。

计算属性允许您使用任何表达式的结果作为对象文字中的属性名称:

var foo='somePropertyName';

// before
var obj = {};
obj[foo] = 42;

// now

var obj = {
  [foo]: 42
};

当然,这也适用于方法定义:

var obj = {
  [foo]() {}
};

解构类似于模式匹配,如果您只需要这样,可以更轻松地引用数组/对象的嵌套属性:

// before
function foo(obj) {
  var username = obj.username;
  var res = obj.res;
}

// now
function foo({username, res}) {

}
于 2015-07-13T11:59:02.617 回答