我是靠谱客的博主 沉静小刺猬,最近开发中收集的这篇文章主要介绍React中事件绑定this指向的三种解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

首先看一下哪三种办法:① 箭头函数 (推荐)

                                        ② Function.prototype.bind()

                                        ③ class 的实例方法

话不多说,我们直接上案例吧!

1:箭头函数 (利用箭头函数自身不绑定this的特点)


class App extends React.Component {
state = {
count: 0,
};
// 事件处理程序
onIncrement() {
console.log('事件处理程序中的this:', this)
this.setState({
count:this.state.count + 1
})
}
render() {
return (
<div>
<h1> 计数器: {this.state.count}</h1>
{/* 箭头函数中的this指向外部环境,此处为 render() 方法 */}
{/* render() 方法中的this为组件实例,可以获取到setState() */}
<button onClick = { () => {this.onIncrement()}}>+1</button>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));

2. Function.prototype.bind()

    利用ES5中的bind方法,将事件处理程序中的this与组件实例绑定到一起

 class App extends React.Component{
constructor() {
//super() 语法要求
super()
this.state = {
count:0
}
//bind改变this指向
this.onIncrement = this.onIncrement.bind(this)
}
onIncrement() {
this.setState ({
count:this.state.count + 1
})
}
render() {
return (
<div>
<h1>计数器:{this.state.count}</h1>
<button onClick={this.onIncrement}>+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('root'))

tip: 在用bind处理this指向的时候,一般我们都在constructor()里面来对this进行绑定,里面有固定          写法语法的要求请稍加注意

3. class 的实例方法

    利用箭头函数形式的class实例方法(推荐)

    该语法是实验性语法,但是,由于babel的存在可以直接使用

 class App extends React.Component {
// 第一种方式
// constructor() {
//
super()
//
this.state = {
//
count: 0
//
}
// }
// 第二种方式
state = {
count: 0
}
// 只需要箭头函数就可以
addJian=() => {
this.setState ({
count: this.state.count + 1
})
}
render() {
return (
<div>
<h1>计数器:{this.state.count}</h1>
<button onClick={this.addJian}>+1</button>
</div>
)
}
}
ReactDOM.render(<App/>,document.getElementById('root'))

tip: 此代码上面还还介绍了state的两种写法

欢迎大家一起交流!!!

最后

以上就是沉静小刺猬为你收集整理的React中事件绑定this指向的三种解决办法的全部内容,希望文章能够帮你解决React中事件绑定this指向的三种解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部