改变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 方法:
this.clickHandle = this.clickHandle.bind(this)//改变this指向—最官方
<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定义的组件的区别
在16.8之前react中function定义的组件不能拥有局部状态和生命周期,是一种无状态组件
16.8之后的react中新增了hooks可以在function定义的组件中模拟局部状态和生命周期
function定义的组件没有this指向问题,代码可读性更强
class定义的组件写法上更接近于强类型语言的语法
class定义的组件中有很多生命周期钩子函数
function定义的组件通过useEffect副作用来模拟处理生命周期
组件挂载完成componentDidMount主要用来调接口取数据