在以类继承的方式定义的组件中,为了能方便地调用当前组件的其他成员方法或属性(如:this.state),通常需要将事件处理函数运行时的 this 指向当前组件实例。
绑定事件处理函数this的几种方法:
第一种方法:
run(){ alert(this.state.name) } <button onClick={this.run.bind(this)}>按钮</button>
第二种方法:
构造函数中改变
this.run = this.run.bind(this); run(){ alert(this.state.name) } <button onClick={this.run>按钮</button>
第三种方法:
run=()=> { alert(this.state.name) } <button onClick={this.run>按钮</button>
demo:
import React from 'react'; import '../assets/css/index.css'; class Home extends React.Component{ // 子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象 constructor(props){ super(props); //固定写法 this.state={ msg:'我是一个home组件', message:'我是一个message', username:'name' } //第二种改变this指向的方法 this.getMessage= this.getMessage.bind(this); } run(){ alert('我是一个run方法') } getData(){ alert(this.state.msg); } getMessage(){ alert(this.state.message); } getName=()=>{ alert(this.state.username); } //第三种改变this指向的方法 setData=()=>{ //改变state的值 this.setState({ msg:"我是一个home组件 这是改变后的值" }) } setName=(str)=>{ //改变state的值 this.setState({ username:str }) } render(){ return( <div> <h2>{this.state.msg}</h2> <h2>{this.state.username}</h2> <button onClick={this.run}>执行方法</button> <br /> <br /> <button onClick={this.getData.bind(this)}>获取数据--第一种改变this指向的方法</button> <br /> <br /> <button onClick={this.getMessage}>获取数据--第二种改变this指向的方法</button> <br /> <br /> <button onClick={this.getName}>获取数据--第三种改变this指向的方法</button> <br /> <br /> <button onClick={this.setData}>改变state里面的值</button> <br /> <br /> <button onClick={this.setName.bind(this,'张三')}>执行方法传值</button> {/* <button onClick={this.setName.bind(this,'张三','李四')}>执行方法传值</button> */} </div> ) } } export default Home;