• 【学】React的学习之旅2


    分成三个状态:

    • Mounted
    • Update
    • Unmounted

    Mounted:当我们看到组件在浏览器中从无到有的效果的时候,mounted已经结束了,这个组件已经被mounted了
    有这个阶段有2个hook函数:

    • componentWillMount:组件将要被mount之前调用
    • componentDidMount:组件被mount之后调用

    还有一个函数,是初始化组件的stategetInitialState()
    Update:并不是说相应的DOM结构一定会发生改变,React会把当前这个组件的当前的state和之前最近一次的state进行对比,只有当state确实发生了改变并且影响了DOM结构的时候,React才会去改变对应的结构。
    Unmounted:一般用得少,得益于浏览器的垃圾回收机制。

    this.state可以拿到组件的样式
    下面这段是可以用来初始化组件的样式

    var Hello = React.createClass({
        //把return的样式设置成初始样式
        getInitialState:function(){
            return {
                color: 'red',
                fontSize:'40px'
            }
        },
    
        render:function (){  //this.state可以拿到组件的样式,state是个json对象,在这里初始化的时候就是用了getInitialState中返回的样式对象直接赋值给当前这个组件中h2的样式,也可以取state的键值,比如写成style={{color:this.state.color}}
            return (<h2 style={this.state}>Hello {this.props.name}</h2>);
        }
    });
    
    ReactDOM.render(
            <Hello title="Ms" name="World"/>,
            document.getElementById('wrap')
    );
    

    Propsstate的区别:
    一般是组件调用方在调用组件时用的,Props一旦指定了一般是不会变化的。对于被调用的组件来说,Props的拥有者是其调用方,在DOM结构上一般是父级,而state可以认为是私属于当前组件的,它的值是可以变化的。

    修改state的值——调用componentsetState()方法
    写在componentDidMount的函数里,表示在mounte之后组件发生的变化,将要变化的属性和值放入一个对象中,再传入到setState()的参数里。
    下面这个例子是演示在一秒钟后改变组件的样式

    var Hello = React.createClass({
    
        getInitialState:function(){
            return {
                color: 'red',
                fontSize:'40px'
            }
        },
    
        render:function (){  
            return (<h2 style={this.state}>Hello {this.props.name}</h2>);
        },
    //这里再说一次为什么要存this为that。定时器方法本事要传一个函数到参数里,这时这个函数作为局部变量,不属于任何对象,那里面的this就是指global对象,在浏览器中就是window。而componentDidMount里的this,指的是当前Hello组件的一个实例,这里的期望是想设置某个组件实例的state,所以要用that存一下再进入定时器,当然也可以不存,直接在定时器参数function最后.bind(this)一下,bind和call以及apply中的第一个参数是指定运行当前函数的调用者,而在setTimeout中参数的this,只是局部变量,还没有进到function中去,所以是指向组件实例。
        componentDidMount: function(){
            var that = this;
            setInterval(function(){
                that.setState({
                    color:`deeppink`,
                    fontSize:'100px'
                });
            },1000);
        }
    });
    

    或者写成:

    componentDidMount: function(){
        setInterval(function(){
            this.setState({
                color:`deeppink`,
                fontSize:'100px'
            });
        }.call(this),1000); //这里可以用call,apply或者bind
    }
    

    我们发现state的值的变化,都会导致组件的当前状态变成updating状态,从而重新render(),我们并没有显式地修改组件的样式,但是state的值变了之后,它的样式就跟着变了。

  • 相关阅读:
    Need to know which polygon shell contains a given face
    静默安装 Microsoft Visual C++ 运行库
    python linecache模块 读取文件行使用注意事项
    不运行 maya 就可以获取 maya 版本,在 python 中获取
    linux setfacl chmod g+s 修改文件夹和文件的默认访问权限和所属组
    Maya material & shading groups 相互获取对应的彼此
    PyQt PySide 查询内置可用的 style
    maxscript 在长时间的运算中卡主,白屏的解决方法 windows.processPostedMessages()
    QProcessBar setFormat 设置进度格式
    MaxPlus WStr Python 中的字符串传递给 MaxPlus
  • 原文地址:https://www.cnblogs.com/bluefantasy728/p/5787251.html
Copyright © 2020-2023  润新知