根据这个babel 文档,将 ES6+ 与 React 一起使用的正确方法是像这样初始化组件:
class Video extends React.Component {
static defaultProps = {
autoPlay: false,
maxLoops: 10,
}
static propTypes = {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired,
posterFrameSrc: React.PropTypes.string.isRequired,
videoSrc: React.PropTypes.string.isRequired,
}
state = {
loopsRemaining: this.props.maxLoops,
}
}
但是一些官方的例子,比如 Dan Abramov 自己的React DnD模块,使用 ES6+ 但仍然在构造函数中定义状态:
constructor(props) {
super(props);
this.moveCard = this.moveCard.bind(this);
this.state = {
// state stuff
}
}
现在 Dan Abramov,作为 React 的重要贡献者,可能知道他可以在构造函数之外定义状态,但仍然选择在构造函数中进行。
所以我只是想知道哪种方式更好,为什么?