改变this指向的方法:call、bind、apply

  • call和apply的区别:

call和apply既改变this指向也会调用该方法

bind只该百年this指向,不调用方法

  • call和apply的区别:传参不同

call传参一个一个的,apply用数组的形式

this指向不改变的时候为undefined的原因:js的运行机制问题,在react初始化的时候render方法执行,render方法第一次执行的时候,this指向当前组件,在下一次点击按钮的时候,在全局环境中调用click Handle方法,this指向window对象,text/bael采用js中的严格模式,在严格模式下,this是undefined,在调用clickHandle方法的时候this已经脱离了当前环境,解决方法:在初始化的时候,先做一次this指向的绑定。 这种绑定this指向的方法是官方推荐写法,组件初始化的时候只做一次绑定

绑定this 方法:

  1. this.clickHandle = this.clickHandle.bind(this)//改变this指向—最官方

  2. <button onClick={this.clickHandle.bind(this)}>{this.state.count}<button>
    直接在render的时候进行this绑定,每一次数据或者属性改变之后this指向绑定的操作都会执行
    
    1
    2
    3
    4
    5
    6
    7

    3. ```
    return (
    <button onClick = {() => this.clickHandle()}>
    {this.state.count}
    </button>
    )---------------最常用

class组件中采用setState改变组件中的状态数据,this.setState()传两个参数,setState是异步的可以设置第二个参数,表示成功之后的回调函数

class定义的组件和function定义的组件的区别

  1. 在16.8之前react中function定义的组件不能拥有局部状态和生命周期,是一种无状态组件

  2. 16.8之后的react中新增了hooks可以在function定义的组件中模拟局部状态和生命周期

  3. function定义的组件没有this指向问题,代码可读性更强

  4. class定义的组件写法上更接近于强类型语言的语法

  5. class定义的组件中有很多生命周期钩子函数

  6. function定义的组件通过useEffect副作用来模拟处理生命周期

组件挂载完成componentDidMount主要用来调接口取数据