【react】慕课网视频学习笔记

1.JSX:语法糖,对语言的功能并没有影响,但更方便程序员使用,增强可读性。

2.jsFiddle:前端在线调试工具

3.为什么要把this额外声明成_self变量,因为window.setTimeout中的函数内部this指向的是global对象,所以需要在之前保存this变量。

也可以利用apply、call、bind修改this指向。

var Hello = React.createClass({
  getInitialState: function () {
    return {
      opacity: 1.0
    };
  },

  componentDidMount: function () {
    this.timer = setInterval(function () {
      var opacity = this.state.opacity;
      opacity -= .05;
      if (opacity < 0.1) {
        opacity = 1.0;
      }
      this.setState({
        opacity: opacity
      });
    }.bind(this), 100);
  },

  render: function () {
    return (
      <div style={{opacity: this.state.opacity}}>
        Hello {this.props.name}
      </div>
    );
  }
});

ReactDOM.render(
  <Hello name="world"/>,
  document.body
);

4.实现按钮、输入框的联动

ref属性,找DOM节点时,用refs

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>菜鸟教程 React 实例</title>
    <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>
    <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>
    <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>
  </head>
  <body>
    <div ></div>
    <script type="text/babel">
        var TestClickComponent = React.createClass({
            handleClick:function(event){
                var tipE = ReactDOM.findDOMNode(this.refs.tip);
                if(tipE.style.display === "none"){
                    tipE.style.display = "inline";
                }else{
                    tipE.style.display = "none";
                }
                event.stopPropagation();
                event.preventDefault();
            },
            render:function(){
                return (
                    <div>
                        <button onClick={this.handleClick}>显示|隐藏</button><span ref="tip">测试点击</span>
                    </div>
                );
            }
        });
        var TestInputComponent = React.createClass({
            getInitialState:function(){
                return {
                    inputContent : ""
                }
            },
            handletextInput:function(event){
                this.setState({
                    inputContent:event.target.value
                });    
            },
            render:function(){
                return (
                    <div>
                    <input type="text" onChange={this.handletextInput} /><span>{this.state.inputContent}</span>
                    </div>
                );
            }
        });
        
        ReactDOM.render(
            <div>
            <TestClickComponent /> 
            <TestInputComponent />
            </div>
            ,document.getElementById("container"))
        
        
    </script>
  </body>
</html>

5.父组件、子组件之间的值传递