React中自定义事件this指向问题

this是基于函数的执行环境(也就是上下文)绑定的,React组件生命周期函数中this的上下文就是组件实例。

你必须谨慎对待 JSX 回调函数中的 this,类的自定义方法默认是不会绑定 this 的。首先调用 constructor() 函数, this.state 的this上下文就是该实例对象;同理,render() 函数中 this也是该实例。

class Bar extends React.Component {
	constructor (){
		super();
		this.state = {
			value: 'react'
		}
	}
	changeValue (){
		console.log(this)  // undefined
	}
	render (){
		console.log(this) // 该组件实例
		return (
			<div>
				<p>{this.state.value}</p>
				<button onClick={this.changeValue}>click me !</button>
			</div>
		)
	}
}

当我们直接绑定this.changeValue调用时,会发现他的this是undefined;你应该为和这个方法绑定this。

解决方式:

①:使用 bind() 函数改变 this 的上下文

class Bar extends React.Component {
	constructor (){
		super();
		this.state = {
			value:'react'
		}
	}
	changeValue (e){
		console.log(e) // 默认event
		this.setState({
			value:`react ${parseInt(Math.random()*100)}`
		})
	}
	render (){
		return (
			<div>
				<p>{this.state.value}</p>
				<button onClick={this.changeValue.bind(this)}>click me !</button>
			</div>
		)
	}
}

也可以在constructor()中:this.changeValue = this.changeValue.bind(this)

②:es6的箭头函数
利用箭头函数将函数的this绑定到其定义时所在的上下文

<div>
	<p>{this.state.value}</p>
	<button onClick={(event) => this.changeValue(event)}>click me !</button>
</div>

或者

changeValue = (e) => {
	console.log(e) // 默认event
	this.setState({
		value:`react ${parseInt(Math.random()*100)}`
	})
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端小小白zyw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值