美文网首页
React 学习总结(二)-组件

React 学习总结(二)-组件

作者: 云飘雾散 | 来源:发表于2017-06-26 02:09 被阅读0次

上篇文章介绍了有关React基本知识,这篇文章主要介绍React的组件部分,组件即封装起来的具有独立功能的UI部件,它也是React核心部分。React组件由三部分组成-属性(props)、状态(state)以及生命周期方法。

React组件的数据分为两种,prop和state,无论prop或者state的改变,都可能引发组件的重新渲染。prop是组件对外接口,state是组件内部状态。

React组件可分为3个状态:

  • Mounting:组件第一次在DOM树中渲染的过程;
  • Updating:组件被重新渲染的过程;
  • Unmounting:组件从DOM树中删除的过程。

React 为每个状态都提供了两种处理函数,will函数在进入状态之前调用,did函数在进入状态之后调用,三种状态共计五种处理函数:

componentWillMount() :在渲染前调用,在客户端也在服务端
componentDidMount() : 在第一次渲染后调用,只在客户端。之后组件已经生成了对应的DOM结构,可以通过this.getDOMNode()来进行访问。 如果你想和其他JavaScript框架一起使用,可以在这个方法中调用setTimeout, setInterval或者发送AJAX请求等操作(防止异部操作阻塞UI)。
componentWillUpdate():在组件接收到新的props或者state但还没有render时被调用。在初始化时不会被调用。
componentDidUpdate():在组件完成更新后立即调用。在初始化时不会被调用。
componentWillUnmount():在组件从 DOM 中移除的时候立刻被调用。

此外,React 还提供两种特殊状态的处理函数:

componentWillReceiveProps(): 在组件接收到一个新的prop时被调用。这个方法在初始化render时不会被调用。
shouldComponentUpdate(): 返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。
组件生命周期流程图.png

下面通过一些代码看看在浏览器中组件的生命周期的执行顺序:

<!DOCTYPE html>
<html>
<head>
    <title>组件生命周期</title>
    <meta charset="utf-8">
    <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 id="container"></div>
    <script type="text/babel">
        var count = 0;
        var HelloWorld = React.createClass({
           //初始化组件属性
            getDefaultProps:function(){
                console.log(" getDefaultProps : 1 ");
            },
          //初始化组件状态
            getInitialState:function(){
                console.log(" getInitialState : 2 ");
                return {
                    name:'Tom'
                };
            },
            handleChange:function(event){
                ++count;
                console.log(' handleChange函数被执行第' + count + '次' );
                this.setState({name:event.target.value});
            },
           //初始渲染组件之前
            componentWillMount:function(){
                console.log(" componentWillMount : 3 ");
            },
           //render函数并不做实际的渲染动作,它只负责返回一个JSX描述的结构,最终由React来操作渲染过程。
            render:function(){
                console.log(" render : 4 ");
                return (<div>
                <input type="text" onChange={this.handleChange} value={this.state.name}></input>
                <span>{this.state.name}</span>
                </div>);
            },
            //初始渲染组件之后(初始render之后),通知组件已经加载完成
            componentDidMount:function(){
                console.log(" componentDidMount : 5 ");
            },
            //组建是否被更新,当组件接收到新的属性(props)和状态(state)改变的话,都会触发
            shouldComponentUpdate:function(){
               console.log(" shouldComponentUpdate : 6 ");
                return true;
            },
            //如果组件状态或者属性改变,并且上面的 shouldComponentUpdate() 返回为 true,就会开始准备更新组件,并调用 componentWillUpdate()
            componentWillUpdate:function(){
                console.log(" componentWillUpdate : 7 ");
            },
            //调用了 render() 更新完成界面之后
            componentDidUpdate:function(){
                console.log(" componentDidUpdate : 8 ");
            }

        });
        ReactDOM.render(<HelloWorld/>,document.getElementById("container"));
    </script>
</body>
</html>```
>我们可以在浏览器控制台看到,当组件第一次被渲染时:

![初始化渲染.png](https://img.haomeiwen.com/i2076195/63f988bd45726f3e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>当我们通过出发input的onChange()函数时即触发setState(),组件的状态发生改变,组件执行顺序如下图所示:

![状态改变.png](https://img.haomeiwen.com/i2076195/864943176af34f49.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>有上面两幅图对比,我们知道:当state发生改变时
1.MountComponent只会在初始化的时候被触发;
2.render函数可以多次被触发;
3.UpdateComponent被触发。

相关文章

  • React 学习总结(二)-组件

    上篇文章介绍了有关React基本知识,这篇文章主要介绍React的组件部分,组件即封装起来的具有独立功能的UI部件...

  • react-hooks

    前置 学习面试视频 总结react hooks react-hooks react-hooks为函数组件提供了一些...

  • React开发相关资料

    React-Router 中文简明教程 总结 React 组件的三种写法 及最佳实践 [涨经验] React-UI组件

  • react+redux+router入门总结

    react+redux+router入门总结 目录 构建配置 React组件、css module React R...

  • React面试题总结

    React面试题总结内容主要包括基础知识,React 组件,React Redux,React 路由。 基本知识 ...

  • React渲染组件

    最近在学习React,有关组件的结构总结一下。 在组件中props单向传递数据,如果子组件间有逻辑关系,把执...

  • React组件学习笔记——慕课网

    React组件学习笔记——慕课网 React组件慕课网视频:传送门 第1章 初识React 1.1 React基本...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React_组建

    这次我们来学习React中的组件。组件是React的核心。 根据React官网的介绍,组件可以将UI切分成一些独立...

  • React学习 - 二.组件基础

    三个重要概念点 组件 return()的返回节点必须是一个,所以有多个节点时,用一个大节点包起 可以给外部使用的组...

网友评论

      本文标题:React 学习总结(二)-组件

      本文链接:https://www.haomeiwen.com/subject/jnnnqxtx.html