码迷,mamicode.com
首页 > 其他好文 > 详细

React中this指向常用的2种修正方式

时间:2018-09-13 01:16:18      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:this   one   箭头   text   efi   xtend   class   extend   code   

一、使用bind方法(构造函数内绑定)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>三大属性之state使用</title>
  </head>
  <body>
    <div id="test1"></div>
  </body>
  <script src="./js/babel.min.js" charset="utf-8"></script>
  <script src="./js/react.development.js" charset="utf-8"></script>
  <script src="./js/react-dom.development.js" charset="utf-8"></script>
  <script type="text/babel">
    // 1.创建虚拟DOM
    class Like extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          isLike: false
        };
        // 自定义函数中的this默认指向undefined,所以需要修改this的指向
        this.handleClick = this.handleClick.bind(this);
      }
      render(){
        const {isLike} = this.state;
        return <h2 onClick={this.handleClick}>{isLike ? ‘他喜欢我‘ : ‘他不喜欢我‘}</h2>;
      }
      handleClick(){
        // 获取状态
        // console.log(this); // undefined
        const isLike = !this.state.isLike;
        // 修改状态
        this.setState({
          isLike
        })
      }
    }
    // 2.渲染
    ReactDOM.render(<Like/>, document.getElementById("test1"));
  </script>
</html>

也可以onClick={this.handleClick.bind(this)};这种方法简洁明了,但由于 function函数 在每个render上重新分配,所以有性能影响。

二、使用箭头函数

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>三大属性之state使用</title>
  </head>
  <body>
    <div id="test1"></div>
  </body>
  <script src="./js/babel.min.js" charset="utf-8"></script>
  <script src="./js/react.development.js" charset="utf-8"></script>
  <script src="./js/react-dom.development.js" charset="utf-8"></script>
  <script type="text/babel">
    // 1.创建虚拟DOM
    class Like extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          isLike: false
        };
        // 自定义函数中的this默认指向undefined,所以需要修改this的指向
        // 1.bind 2.箭头函数 3.
        // this.handleClick = this.handleClick.bind(this);
      }
      render(){
        const {isLike} = this.state;
        return <h2 onClick={this.handleClick}>{isLike ? ‘他喜欢我‘ : ‘他不喜欢我‘}</h2>;
      }
      // 箭头函数修正this指向
      handleClick = () => {
        // 获取状态
        // console.log(this); // undefined
        const isLike = !this.state.isLike;
        // 修改状态
        this.setState({
          isLike
        })
      }
    }
    // 2.渲染
    ReactDOM.render(<Like/>, document.getElementById("test1"));
  </script>
</html>

 

React中this指向常用的2种修正方式

标签:this   one   箭头   text   efi   xtend   class   extend   code   

原文地址:https://www.cnblogs.com/llcdxh/p/9638149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!