如何在React Component类中使用类范围的常量?

时间:2017-11-03 17:08:08

标签: javascript reactjs babeljs

通常我会这样做:

var tagSymbols = Object.freeze([
  '!',
  '+',
  '@'
]);

但后来我知道Babel(?)中有const

const tagSymbols = Object.freeze([
  '!',
  '+',
  '@'
]);

两者都返回相同的错误:

Syntax error: Unexpected token (4:6)

  2 | 
  3 | class GeneralToDoListInput extends Component {
> 4 |   var tagSymbols = Object.freeze([
    |       ^
  5 |     '!',
  6 |     '+',
  7 |     '@'

Syntax error: Unexpected token (5:8)

  3 | class GeneralToDoListInput extends Component {
  4 | 
> 5 |   const tagSymbols = Object.freeze([
    |         ^
  6 |     '!',
  7 |     '+',
  8 |     '@'

1 个答案:

答案 0 :(得分:8)

您不能将变量声明放在类主体中。语言不允许这样做。在ES6中,类声明的结构基本上是

class Foo() {
  method1() {}
  method2() {}
  ...
}

最简单的解决方案是将变量声明放在类之外:

const tagSymbols = ...:
class GeneralToDoListInput extends Component {
  ...
}

类/模块中的任何代码都可以访问tagSymbols

如果它必须是一个类属性,你可以定义一个静态getter:

class GeneralToDoListInput extends Component {
  static get tagSymbols() {
    return Object.freeze(...);
  }
}

或者在声明后将其分配给班级:

class GeneralToDoListInput extends Component {
  ...
}
GeneralToDoListInput.tagSymbols = ...;