美文网首页
React constructor

React constructor

作者: 张培_ | 来源:发表于2018-09-07 22:37 被阅读59次

React 中的constructor

以前一直觉得constructor必须声明,否则会造成无法获取到this.props方法,其实:

如果你不需要初始化你的state属性,也不需要bind任何方法,那么完全不需要显示写出这个构造方法。

时间

这个方法会在组件实例化的时候被调用,此时组件并没有被mount。如果这个方法被定义了,而且你还要在这个方法中写statement,那么请先进行super(props)的调用:

否则会造成this.props不存在(因为此时实例还没创建),也就是说,如果你的state初始值需要props赋值,那么请必须先进行super(props)的调用

绝对不可以这样做

constructor(props) {
 super(props);
 // Don't do this!
 this.state = { color: props.color };
}

作用

  • 初始化state
  • binding event handler method to instance

其实也可以被完全替代

  • 初始化state: 因为state可以理解为component class中的属性(实例),所以可以按照class中定义属性的方式定义,并且还可以获取到this.props的值

    • 原因: 一旦被该component被实例化会立刻将props赋值this.props
    class Counter extends Component {
          state = { counter: this.props.initCount };
          render() {
              return <button onClick={this.onIncrementClick}>{this.state.counter}</button>;
        }}
    
  • bind event handler

    bind原因是:害怕丢失this指代的对象,如果使用function定义方式定义实例函数,实例函数可能会丢失this:

    • 使用function定义的函数this指代的是函数的调用者,如果没有明确的调用者,那么就是window

    因此: 我们可以采用箭头函数定义实例函数,因为箭头函数的this用的是闭包中的this

    class Counter extends Component {
      state = { counter: 0 };
      onIncrementClick = () => {
        this.setState(this.increment);
      }
      increment(state) {
         return { ...state, counter: state.counter + 1 };
      }
    render() {
      return <button onClick={this.onIncrementClick}>{this.state.counter}</button>; 
     }
    }
    
    

相关文章

  • React生命周期

    挂在 constructor()[https://react.docschina.org/docs/react-c...

  • React constructor

    React 中的constructor 以前一直觉得constructor必须声明,否则会造成无法获取到this....

  • React setState 同步异步

    class Example extends React.Component { constructor() { ...

  • React中constructor及super

    constructor( ) 在React中constructor表示父类的构造方法,用来新建父类的this对象,...

  • 前端面试详解

    React篇 1.react有哪几个生命周期? constructor() static getDerivedSt...

  • react 17生命周期

    Mounting constructor()[https://reactjs.org/docs/react-com...

  • 理解React生命周期

    constructor React借用class类的constructor充当初始化钩子。在我们类扩展任何其他具有...

  • React 生命周期

    React 生命周期 旧生命周期 挂载 constructor componentWillMount render...

  • 优化 react: constructor:构造函数,在创建组件之前调用(1次)componentWillMoun...

  • React相关问题

    react组件中的constructor函数 [参考链接]https://segmentfault.com/a/1...

网友评论

      本文标题:React constructor

      本文链接:https://www.haomeiwen.com/subject/sbjfgftx.html