静态propTypes在ES6下不起作用

Pav*_*vel 15 babel ecmascript-6 reactjs

我想为道具添加一些规则:

import React, { Component } from 'react'

export default class App extends Component {
  static propTypes = { name: React.PropTypes.string.isRequired };

  render() {
    return(
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了一个错误:

Warning: Failed prop type: Required prop `name` was not specified in `App`.
Run Code Online (Sandbox Code Playgroud)

我有这个配置为babel:

{
  "presets": ["es2015", "react"],
  "plugins": ["transform-runtime", "transform-class-properties"]
}
Run Code Online (Sandbox Code Playgroud)

我做错了什么?

UPD.更改代码:使用static

Jiz*_*ves 20

您似乎没有以能够识别静态类属性的方式来转换代码.如果您使用的是babel,可以使用Class Property Transform启用它:https://babeljs.io/docs/plugins/transform-class-properties/.

在我们的代码库中,我们通过Stage 1预设获得此功能,https://babeljs.io/docs/plugins/preset-stage-1/

当然,你总是可以在课堂上定义你的proptypes:

export default class App extends Component {
  ...
  render() {
    ...
  } 
}

App.propTypes = {
 data: PropTypes.object.isRequired...
}
Run Code Online (Sandbox Code Playgroud)

^^这不需要任何特殊的翻译.

类in static属性很好,所以你可以像这样设置它

export default class App extends Component {
  static propTypes = { name: React.PropTypes.string.isRequired };
  render() {...} 
}
Run Code Online (Sandbox Code Playgroud)

而不是this在构造函数中定义propTypes .

  • 我打开了这个插件`transform-class-properties`,但仍然继续得到这个错误 (2认同)
  • 所以这很好 - 你希望你的'App`需要道具'名称',它告诉你你忘记了这个必需的道具.提供prop,例如<App name ="Test Name"/>,或从propTypes验证中删除isRquired. (2认同)