React中是否仍然需要使用自动绑定和属性初始值设定项构造函数

Max*_*ton 10 ecmascript-6 reactjs ecmascript-next es6-class

我正在重构一个基于es6类的React组件,该组件使用普通的构造函数,然后绑定方法,并在该构造函数中定义状态/属性.像这样的东西:

class MySpecialComponent extends React.Component {
  constructor(props) {
   super(props)
   this.state = { thing: true }
   this.myMethod = this.myMethod.bind(this)
   this.myAttribute = { amazing: false }
  }

  myMethod(e) {
   this.setState({ thing: e.target.value })
  }
}
Run Code Online (Sandbox Code Playgroud)

我想重构这个,以便我自动绑定函数,并使用属性初始化器的状态和属性.现在我的代码看起来像这样:

class MySpecialComponent extends React.Component {
  state = { thing: true }
  myAttribute = { amazing: false }


  myMethod = (e) => {
   this.setState({ thing: e.target.value })
  }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,我还需要构造函数吗?或道具也是autobound?我本来希望仍然需要构造函数和包含super(props),但我的代码似乎工作,我很困惑.

谢谢

小智 7

除非需要props在初始状态对象中引用,否则不需要显式定义的构造函数.

  • 我们可以在没有构造函数的情况下引用初始状态的`pops`,对吗?比如:`state = {loopsRemaining:this.props.maxLoops,}` (5认同)
  • @AdamC。是正确的。即使您需要在初始状态对象中引用props,也不需要构造函数。参见[我的答案](/sf/ask/3127913701/#52064777) (2认同)

Chr*_*sen 7

根据我的理解,使用类属性时根本不需要键入构造函数(如第二个代码示例中所示)。公认的答案表明,如果您“需要在初始状态对象中引用道具”,则确实需要一个,但是,如果您使用上述类属性,则可能是使用Babel来进行翻译,在这种情况下,构造函数使用,只是在幕后完成。因此,即使您在状态下使用道具,也无需自己添加构造函数。

有关更好的示例和更好的说明,请参见此文章