关于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里的代码

原文地址:https://www.cnblogs.com/WildSky/p/11255296.html