我想知道组件的类声明中不需要构造函数的条件。我认为它是针对无状态组件的,但还有其他原因吗?例如,组件内部没有任何功能(除了生命周期功能)是一个吗?
3 回答
2
我认为在这里留下反应文档的摘录是合适的(强调我的):
构造函数是初始化状态的正确位置。如果您不 初始化状态并且不绑定方法,则不需要 为您的 React 组件实现构造函数。
于 2017-09-21T14:53:40.110 回答
0
如果您使用 babel stage-2 预设,则实际上根本不需要构造函数,因为它提供了有效替换其用法的类属性:
class Component extends React.Component {
constructor() {
this.state = {};
this.handleClick = this.handleClick.bind(this);
}
handleClick() { console.log('click'); }
}
变成
class Component extends React.Component {
state = {};
handleClick = () => console.log('click');
}
忽略这一点,仅当您需要将组件方法绑定到其上下文或需要初始化state
属性时,才需要构造函数。
另一种情况是如果你需要对this.props
类属性做一些事情,但这被 React 认为是一种反模式。
class Component extends React.Component {
constructor() {
this.state = {
// don't do this! anti-pattern! duplication of source of truth!
duplicatedState: this.props.myName,
};
}
}
于 2017-09-21T14:56:50.650 回答
0
如果组件在使用之前需要设置内部状态,我通常只会添加构造函数,否则我会省略构造函数。在组件中拥有功能不会影响我在这方面的决定
于 2017-09-21T14:52:28.707 回答