事件处理1:给某元素绑定事件,执行的方法需要添加bind()

import React from 'react';
import ReactDOM from
'react-dom'; class HeaderEs6 extends React.Component { //constructor用来初始化组件属性,this.state定义数据,super()为了接收到父类的this指针 constructor(props) { super(props); this.state = { name: 'kevin', age: 29 } } handleClick() { this.setState({ age: this.state.age + 1 }); } render() { return ( <div> <h1>I am {this.state.name}</h1> <p>I am {this.state.age} years old</p> <button onClick={this.handleClick.bind(this)}>加一岁</button> </div> ) } } ReactDOM.render( <div> <HeaderEs6 /> </div>, document.getElementById('app')
);

上面示例代码给button绑定click事件,执行的方法不能用this.handleClick的方式,会报错,

因为此时handleClick中的this已经不是HeaderEs6组件中的this了,所以要用this.handleClick.bind(this)的方式

上面的写法虽然能够解决问题,但每绑定一个事件都需要这样操作,对代码可读性有一定影响,并且不方便复用,

可以通过把handleClick中的this修正到HeaderEs6组件中来解决该问题,

一般推荐这种写法,this.handleClick = this.handleClick.bind(this);  

import React from 'react';
import ReactDOM from 'react-dom';

class HeaderEs6 extends React.Component {
    //constructor用来初始化组件属性,this.state定义数据,super()为了接收到父类的this指针
    constructor(props) {
        super(props);
        this.state = {
            name: 'kevin',
            age: 29
        }
        this.handleClick = this.handleClick.bind(this);
    }
    handleClick() {
        this.setState({
            age: this.state.age + 1
        });
    }
    render() {
        return (
            <div>
                <h1>I am {this.state.name}</h1>
                <p>I am {this.state.age} years old</p>
                <button onClick={this.handleClick}>加一岁</button>
            </div>
        )
    }
}

ReactDOM.render(
    <div>
        <HeaderEs6 />
    </div>,
    document.getElementById('app')
);

 

事件处理2:使用箭头函数

如果你觉得上面解决方法还是比较麻烦,推荐用箭头函数来处理

import React from 'react';
import ReactDOM from 'react-dom';

class HeaderEs6 extends React.Component {
    //constructor用来初始化组件属性,this.state定义数据,super()为了接收到父类的this指针
    constructor(props) {
        super(props);
        this.state = {
            name: 'kevin',
            age: 29
        }
    }
    handleClick() {
        this.setState({
            age: this.state.age + 1
        });
    }
    render() {
        return (
            <div>
                <h1>I am {this.state.name}</h1>
                <p>I am {this.state.age} years old</p>
                <button onClick={(e) => this.handleClick(e)}>加一岁</button>
            </div>
        )
    }
}

ReactDOM.render(
    <div>
        <HeaderEs6 />
    </div>,
    document.getElementById('app')
);

 

有需要的朋友可以领取支付宝到店红包,能省一点是一点