常见的 五种this 指向问题的解决方案。
高阶函数:通过 this 来直接调用 handleClick 并返回箭头函数。
柯里化:通过函数调用继续返回函数的形式,实现多次接收参数最后统一处理的函数编码形式。
包裹一层箭头函数。
箭头函数中的 this 指向“外部”,即 render 函数,而 render 函数中的 this 正是组件实例。
使用 bind。
关于 class 中的实例方法和原型方法?
原型方法演示
实例方法演示
所以,要明白在 class 中直接写的方法和通过赋值语句添加的方法本质上不一样。
注意:在 constructor 中挂载的方法也是实例方法。
通过赋值语句往实例上面添加一个箭头函数。
证明“外层” this 确实是组件实例
在构造函数中再创建一个实例方法,和原型方法公用一个函数体。
class App extends React.Component {
constructor() {
super()
this.state = {
count: 0,
}
// 1. 往实例自身上又挂载了一个 handleClick 函数
// 2. 此函数的函数体是通过原型上 handleClick 函数生成的新函数
// 3. 并把原型上 handleClick 函数中的 this 通过 bind 绑定为了 this,而这里构造函数中的 this 正是实例对象
// 4. 其实点击的时候调用的是这个构造函数 handleClick(就近原则),而这个构造函数中的 handleClick 执行的是原型上的 handleClick 的函数体
this.handleClick = this.handleClick.bind(this)
}
handleClick() {
console.log(this.state.count)
}
render() {
return (
计数器:{this.state.count}
)
}
}