zoukankan      html  css  js  c++  java
  • 关于react的疑惑_2

    直接上代码

    <script type="text/babel">
        class Buttons extends React.Component {
            constructor(props) {
                super(props);
                this.state = {button: true};
                this.handle = this.handle.bind(this);
            }
            handle() {
                this.setState((prevState) => ({
                    button: !prevState.button
                }));
            }
            render() {
                return(
                <div>
                    <button onClick={this.handle}>
                        {this.state.button?'ON': 'OFF'}
                    </button>
                </div>)
            }
        }
        ReactDOM.render(
            <Buttons/>,
            document.getElementById('example')
        );
    </script>

    先说一下为什么函数handleClick要绑定this,

    我是这样理解的因为调用handleClick是通过onClick调用的,而onClick是button的属性所以调用函数的时候this就会指向button

    可是结果是我在handleClick里面加一个console.log(this),结果是输出undefined,?????????????????????????这是什么操作我也看不懂

    还有一点就是为什么在onClick里面使用this.handle,this会指向react组件,????????????????,

    按照我的理解是onClick是button的属性,那么在onClick里面使用的话this不应该指向button吗????

    希望以后可以知道这些疑惑

     ---------------------------------------------------------------------------------------------------------------------------------------------

    2019.7.29

    我发现对着抄react代码也是有风险的,因为没有抄对的话,console里是显示不出为什么错了,因为可能你抄错了,那么连整个网页都显示不出来就好像是没有网一样,

    好直接上代码

    源码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8" />
    <title>React 实例</title>
    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    <body>
    <div id="example"></div>
    
    <script type="text/babel">
    class LoginControl extends React.Component {
      constructor(props) {
        super(props);
        this.handleLoginClick = this.handleLoginClick.bind(this);
        this.handleLogoutClick = this.handleLogoutClick.bind(this);
        this.state = {isLoggedIn: false};
      }
    
      handleLoginClick() {
        this.setState({isLoggedIn: true});
      }
    
      handleLogoutClick() {
        this.setState({isLoggedIn: false});
      }
    
      render() {
        const isLoggedIn = this.state.isLoggedIn;
        let button;
    
        if (isLoggedIn) {
          button = <LogoutButton onClick={this.handleLogoutClick} />;
        } else {
          button = <LoginButton onClick={this.handleLoginClick} />;
        }
    
        return (
          <div>
            <Greeting isLoggedIn={isLoggedIn} />
            {button}
          </div>
        );
      }
    }
    
    function UserGreeting(props) {
      return <h1>欢迎回来!</h1>;
    }
    
    function GuestGreeting(props) {
      return <h1>请先注册。</h1>;
    }
    
    function Greeting(props) {
      const isLoggedIn = props.isLoggedIn;
      if (isLoggedIn) {
        return <UserGreeting />;
      }
      return <GuestGreeting />;
    }
    
    function LoginButton(props) {
      return (
        <button onClick={props.onClick}>
          登陆
        </button>
      );
    }
    
    function LogoutButton(props) {
      return (
        <button onClick={props.onClick}>
          退出
        </button>
      );
    }
    
    ReactDOM.render(
      <LoginControl />,
      document.getElementById('example')
    );
    </script>
    
    </body>
    </html>

    我抄的代码:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8" />
        <title>React 实例</title>
        <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
        <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
        <!-- 生产环境中不建议使用 -->
        <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    </head>
    <body>
    
    <div id="example"></div>
    <div id="example2"></div>
    <script type="text/babel">
        class LoginControl extends React.Component {
            constructor(props) {
                super(props);
                this.handleLoginClick = this.handleLoginClick.bind(this);
                this.handleLogoutClick = this.handleLogoutClick.bind(this);
                this.state = {isLoggedIn: false};
            }
    
            handleLoginClick() {
                this.setState({isLoggedIn: true});
            }
    
            handleLogoutClick() {
                this.setState({isLoggedIn: false});
            }
    
            render() {
                const isLoggedIn = this.state.isLoggedIn;
                let button;
    
                if(isLoggedIn) {
                    button = <LoginControl onClick={this.handleLogoutClick}/>;
                }
                else {
                    button = <LoginControl onClick={this.handleLoginClick}/>;
                }
                return (
                    <div>
                        <Greeting isLoggedIn={isLoggedIn} />
                        {button}
                    </div>
                );
            }
        }
    
        function UserGreeting(props) {
            return <h1>Hello</h1>;
        }
        function GuestGreeting(props) {
            return <h1>Register</h1>;
        }
    
        function Greeting(props) {
            const isLoggedIn = props.isLoggedIn;
            if(isLoggedIn) {
                return <UserGreeting/>;
            }
            return <GuestGreeting/>;
        }
    
        function LoginButton(props) {
            return (
                <button onClick={props.onClick}>
                    登录
                </button>
            );
        }
    
        function LogoutButton(props) {
            return (
                <button onClick={props.onClick}>
                    退出
                </button>
            );
        }
    
        ReactDOM.render(
            <LoginControl/>,
            document.getElementById('example')
        );
    
    </script>
    </body>
    </html>

    其实具体就是主要看script里的代码

  • 相关阅读:
    mac下mysql忘记了密码怎么办
    图片标签的四种路径
    三栏布局
    MongoDB学习笔记
    mysql B+ 树
    移动终端设备ID
    前端基础HTML以及常用的标签
    python--os模块
    python--基本数据 类型
    python基础3、4---流程控制、运算符
  • 原文地址:https://www.cnblogs.com/WildSky/p/11255296.html
Copyright © 2011-2022 走看看