1. 程式人生 > >React中this指向常用的2種修正方式

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

head bin fine function reac round component 需要 ike

一、使用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種修正方式