您好,欢迎访问一九零五行业门户网

React组件生命周期实例分析

本文主要和大家分享react组件生命周期,react组件的生命周期有一堆的相关函数,其实就是一推的钩子函数。在react组件创建的各个阶段触发特定的钩子函数。希望能帮助到大家。
可以先大概看一下下面这张图:
constructor构造函数,在创建组件的时候调用一次。
constructor(props, context)
componentwillmount在组件挂载之前调用一次。如果在这个函数里面调用setstate,render()知道state发生变化,并且只渲染一次。
void componentwillmount()
renderrender是一个react组件所必不可少的核心函数。不要在render里面修改state。也不要去读写dom或者与服务器交互,保持render()方法的纯净。
reactelement render()
componentdidmount在组件挂载之后调用一次。这个时候,子组件也都挂载好了,可以在这里使用refs。
void componentdidmount()
shouldcomponentupdate这个方法在初始化render时不会执行,当props或者state发生变化时执行。函数默认返回true,需要重新render。返回false,就不会重新render了。componentwillupdate和componentdidupdate方法也不会被调用。在比较复杂的应用里,有一些数据的改变并不影响界面展示,可以在这里做判断,优化渲染效率。
boolean shouldcomponentupdate(     object nextprops, object nextstate )
componentwillupdateshouldcomponentupdate返回true之后,componentwillupdate会被调用。需要特别注意的是,在这个函数里面,不要用this.setstate来修改状态。不然这个函数会无限循环执行。这个函数调用之后,就会把nextprops和nextstate分别设置到this.props和this.state中。紧接着这个函数,就会调用render()来更新界面了。
void componentwillupdate(   object nextprops, object nextstate )
componentdidupdate除了首次render之后调用componentdidmount,其它render结束之后都是调用componentdidupdate。
void componentdidupdate()
componentwillreceivepropsprops是父组件传递给子组件的。父组件发生render的时候子组件就会调用componentwillreceiveprops(不管props有没有更新,也不管父子组件之间有没有数据交换)。在这个回调函数里面,你可以根据属性的变化,通过调用this.setstate()来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用。
void componentwillreceiveprops(nextprops) {     this.setstate({...}); }
componentwillunmount当组件要被从界面上移除的时候,就会调用componentwillunmount(),在这个函数中,可以做一些组件相关的清理工作,例如取消计时器、网络请求等。
void componentwillunmount()
下面是一个react组件生命周期的测试例子var react = require('react'); var reactdom = require('react-dom'); class parent extends react.component {   constructor(){     super()     console.log(%cparent -- constructor,color:green);     this.state = {       name : 'lucy'     }   }   componentwillmount(){     console.log(%cparent -- componentwillmount,color:green);   }   componentdidmount(){     console.log(%cparent -- componentdidmount,color:green);   }   componentwillreceiveprops(){     console.log(%cparent -- componentwillreceiveprops,color:green);   }   shouldcomponentupdate(){     console.log(%cparent -- shouldcomponentupdate,color:green);     return true;   }   componentwillupdate(){     console.log(%cparent -- componentwillupdate,color:green);   }   componentdidupdate(){     console.log(%cparent -- componentdidupdate,color:green);   }   componentwillunmount(){     console.log(%cparent -- componentwillunmount,color:green);   }   changename(){     this.setstate({name : 'jone'})   }   unmountcomponent(){     reactdom.unmountcomponentatnode(document.getelementbyid(app));   }   render(){     console.log(%cparent -- render,color:green);     return(       <p style={{border:'1px solid #000',color:'green'}}>         <h2>parent:</h2>         <h3>hello {this.state.name}</h3>         <button onclick={this.changename.bind(this)}>state改变</button>         <button onclick={this.unmountcomponent.bind(this)}>卸载组件</button>         <child props1="haha"></child>       </p>     )   } } class child extends react.component {   constructor(){     super()     console.log(  %cchild -- constructor,color:blue);     this.state = {     }   }   componentwillmount(){     console.log(  %cchild -- componentwillmount,color:blue);   }   componentdidmount(){     console.log(  %cchild -- componentdidmount,color:blue);   }   componentwillreceiveprops(){     console.log(  %cchild -- componentwillreceiveprops,color:blue);   }   shouldcomponentupdate(){     console.log(  %cchild -- shouldcomponentupdate,color:blue);     return true;   }   componentwillupdate(){     console.log(  %cchild -- componentwillupdate,color:blue);   }   componentdidupdate(){     console.log(  %cchild -- componentdidupdate,color:blue);   }   componentwillunmount(){     console.log(  %cchild -- componentwillunmount,color:blue);   }   changename(){     this.setstate({name : 'jone'})   }   render(){     console.log(  %cchild -- render,color:blue);     return(       <p style={{border:'1px solid #000',margin:'10px',color:'blue'}}>         <h2>child:</h2>       </p>     )   } } reactdom.render(   <parent></parent>,   document.getelementbyid('app') );
测试例子截图如下:
改变父组件的state:
卸载组件后:
相关推荐:
微信小程序生命周期详解
react组件的生命周期函数是什么
react native 中组件生命周期的简单介绍
以上就是react组件生命周期实例分析的详细内容。
其它类似信息

推荐信息