-1

我想知道组件的类声明中不需要构造函数的条件。我认为它是针对无状态组件的,但还有其他原因吗?例如,组件内部没有任何功能(除了生命周期功能)是一个吗?

4

3 回答 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 回答