美文网首页
React 的事件处理 之 this 的绑定方式

React 的事件处理 之 this 的绑定方式

作者: ___Jing___ | 来源:发表于2019-06-18 10:39 被阅读0次

    在 Javascript 中,我们需要根据情况处理 this 的指向,那么,在 React 中,我们都是如何处理 this 的呢?下面让我们一起来看一下。

    方法一: 在 constructor 中对函数进行 this 绑定,但是定义的方法多了,也比较麻烦。

    class Toggle extends React.Component {
      constructor(props) {
        super(props);
        this.state = {isToggleOn: true};
    
        // This binding is necessary to make `this` work in the callback
        this.handleClick = this.handleClick.bind(this);
      }
    
      handleClick() {
        this.setState(state => ({
          isToggleOn: !state.isToggleOn
        }));
      }
    
      render() {
        return (
          <button onClick={this.handleClick}>
            {this.state.isToggleOn ? 'ON' : 'OFF'}
          </button>
        );
      }
    }
    
    ReactDOM.render(
      <Toggle />,
      document.getElementById('root')
    );
    

    方法二: 通过箭头函数对 this 进行绑定,不过这个方法是“实验性”的,随时可能会变动,不太推荐。

    class LoggingButton extends React.Component {
      // This syntax ensures `this` is bound within handleClick.
      // Warning: this is *experimental* syntax.
      handleClick = () => {
        console.log('this is:', this);
      }
    
      render() {
        return (
          <button onClick={this.handleClick}>
            Click me
          </button>
        );
      }
    }
    

    方法三: 在函数调用时使用箭头函数进行绑定,这个是我在日常工作中常用的方法,比较推荐。

    class LoggingButton extends React.Component {
      handleClick() {
        console.log('this is:', this);
      }
    
      render() {
        // This syntax ensures `this` is bound within handleClick
        return (
          <button onClick={(e) => this.handleClick(e)}>
            Click me
          </button>
        );
      }
    }
    

    相关文章

      网友评论

          本文标题:React 的事件处理 之 this 的绑定方式

          本文链接:https://www.haomeiwen.com/subject/liezfctx.html