(精华)2020年7月26日 React this的指向问题

66 阅读1分钟
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>this</title>
</head>

<body>
    <div id="app">

    </div>
    <script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
    <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <script type="text/babel">
        // 复杂的组件 es6 class
        // 页面上是我喜欢你  点击之后变成你喜欢我
        class Complex extends React.Component{
            constructor(){
                super()
                this.state = {
                    flag:true
                }
                //第二种改变this
                // this.handelClick = this.handelClick.bind(this)
            }
            //第三种匿名函数
            handelClick = ()=>{
                // 改变state  this.setState
                const {flag} = this.state;
                this.setState({
                    flag:!flag
                })
            }
            //第一种改变this,默认严格模式
            //<h1 onClick={this.handelClick.bind(this)}>{msg}</h1>
            render(){
                const {flag} = this.state
                const msg = flag ? '改变前' : '改变后'
                return (
                    <div>
                        <h1 onClick={this.handelClick}>{msg}</h1>
                    </div>
                )
            }
        }
        ReactDOM.render(<Complex />,document.getElementById("app"))
    </script>
</body>

</html>