大家好,小信来为大家解答以上问题。react生命周期总结,react生命周期很多人还不知道,现在让我们一起来看看吧!
1、 我们先来看一张图,关于react中每个周期的进程。
2、 从这个图中,我们知道在组件的生命周期中有十种方法。
3、 1.首先,getDefaultProps()方法设置默认的组件属性(this.props),
4、 2.方法,然后getInitialState()方法设置默认状态(this.state),
5、 3.一旦设置了组件的属性和状态,就该准备呈现组件了,也就是componentWillMount()方法。
6、 4.准备工作完成后,就是正式的渲染组件,也就是render()方法。
7、 5.方法,ok。渲染后组件完全变成DOM节点,这就是组件渲染完成方法componentDidMount()。
8、 6.当组件渲染完成时,可能会出现这些情况。
9、 情况一:物业变动。
10、 7.一旦属性被更改,组件将接收属性更改,即componentWillReceiveProps()方法,
11、 8.方法。当然react这个时候还是会给你反悔的机会,就是会执行shouldComponentUpdate方法。如果不想让他更新,就返回false。如果没有返回false,那么他将调用componentWillUpdate()方法来被组件更新。
12、 9.方法,然后执行render()方法来更新呈现组件。最后,呈现更新完成componentDidUpdate(),然后返回运行状态。当然,如果您阻止组件更新并传入false,那么组件将直接忽略此更改。
13、 属性,而不更改运行状态。
14、 情况二:状态变化。
15、 一旦运行组件的状态发生变化,接收组件属性变化的componentWillReceiveProps()方法自然不会被触发,如果要阻止组件的更新,它会直接跳转到下一步,执行shouldComponentUpdate()方法。那么接下来的过程也是一样的。
16、 案例3:从DOM节点中移除组件
17、 方法10,属性或状态不变,但是呈现的组件直接从DOM节点中移除,这将触发方法componentWillUnmount()
18、 这样,组件的生命周期就直接结束了。除非您下次创建该组件。
19、 好了,10种方式就这么多了。
20、 -
21、 这些方法的特点如下所述。
22、 1.对象getDefaultProps()。返回属性集合对象。
23、 首先,它是第一个getDefaultProps()方法。该方法在创建组件时执行,然后可以在创建组件后创建其实例对象。然后,在此方法中设置的默认属性将在所有实例之间共享。
24、 它类似于面向对象编程的静态变量和方法。
25、 2.object getInitialState()返回状态集合对象
26、 让我们谈谈getInitialState方法,它作用于组件的实例。它在创建实例时调用一次(在组件的生命周期中只调用一次),用于初始化每个实例的状态。此时,可以访问this.props。
27、 3.voidcomponentWillMount()返回一个空对象。
28、 然后,组件将由componentWillMount()方法呈现,该方法在初始化呈现之前执行一次。如果在这个方法中调用了setState,render()就知道状态发生了变化,只会执行一次,不会陷入死循环。
29、 4.reactElement render()方法返回一个React组件。
30、 调用render()方法时,首先检查this.props和this.state是否返回子元素,子元素可以是DOM组件或其他自定义复合控件的虚拟实现。如果不想渲染,可以返回null或false。在这种情况下,react呈现一个noscript标记。当返回null或false时,ReactDOM.findDOMNode(this)返回的nullrender()方法是非常纯的,这意味着组件的状态不应该在这个方法中初始化,它每次执行都会返回相同的值。它不会读写DOM,也不会与服务器交互。如果必须在componentDidMount()方法或其他生命周期方法(如服务器交互)中实现,保持render()方法的纯粹性会使服务器更精确,组件更简单。
31、 5.VoidcomponentIdmount(),返回值为null。
32、 初始化渲染后,只执行一次,也就是初始化的时候。(在非初始化时间,组件渲染完成后,执行组件变化完成方法componentDidUpdate()。)在这种方法中,可以访问任何组件。如果组件是嵌套的,将首先执行最内层组件的componentIDMOUNT()方法,最后执行最外层组件的componentIDMOUNT()方法。通过这个函数,您可以与其他js框架进行交互,比如设置定时器setTimeout或setInterval,或者发起网络请求。
33、 6.booleanshouldComponentUpdate(),返回true或false。
34、 boolean shouldcomponentdupdate(object next props,object nextState)
35、 这个方法在渲染初始化的时候不会执行,但是在道具或者状态改变的时候会执行,当新的道具或者状态不需要更新组件的时候会在渲染之前返回false。
36、 shouldComponentUpdate:function(nextProps,nextState) { return nextProps.id!==this . props . id;}
37、 当shouldComponentUpdate方法返回false时,不会执行render()方法,也不会调用componentWillUpdate和componentDidUpdate方法。
38、 默认情况下,shouldComponentUpdate方法返回true,以防止在状态快速变化时出现问题。但如果状态不变,props为只读,可以直接重写shouldComponentUpdate方法,比较props和状态的变化,决定UI是否更新。当组件较多时,这种方法可以有效地提高应用程序的性能。
39、 7.VoidcomponentTwillUpdate(),返回值为空。
40、 void component will update(object next props,object nextState)
41、 当道具和状态改变时,它们在render方法之前执行。当然,这个方法在渲染初始化的时候是不会执行的。需要注意的是,不能用this.setState来修改这个函数中的状态。调用此函数后,nextProps和nextState将分别设置为this.props和this.state。在这个函数之后,将立即调用render()来更新界面。
42、 8.voidcomponentDidUpdate(),没有返回值
43、 void componentDidUpdate(object prev props,object prevState)
44、 它在组件更新后执行,但不在渲染初始化时执行。
45、 9.voidcomponentWillReceiveProps(),无返回值
46、 void componentWillReceiveProps(object next props)
47、 它在props更改时执行,而不是在渲染初始化时执行。在这个回调函数中,您可以根据属性更改通过调用this.setState()来更新组件状态。旧属性仍然可以通过这个获得。props在这里调用更新状态是安全的,它不会触发额外的呈现调用。
48、 componentWillReceiveProps:function(nextProps){ this . setstate({ likes increasing:nextProps . like count this . props . like count });}10、void componentWillUnmount(),无返回值。
49、 10、void componentWillUnmount()
50、 当一个组件要从接口中移除时,componentWillUnmount()将被调用。在此功能中,您可以执行一些与组件相关的清理工作,如取消定时器、网络请求等。
51、 通过代码观察运行状态。
52、 超文本标记语言
53、 头
54、 meta http-equiv=' Content-Type ' Content=' text/html;charset=UTF-8' /
55、 /头
56、 身体
57、 script src='js/react.js'/script
58、 script src=' js/react-DOM . js '/script
59、 div id='life'/div
60、 脚本
61、 //-自定义组件MyComponent
62、 -
63、 var my component=react . create class({
64、 Change:function(e){//值更改时的onChange方法
65、 this.setState({
66、 状态1:e .目标值,
67、 });
68、 ReactDOM.render(
69、 React.dom.div ({ID:'何姿',},react . createelement(my component,{pro1:'我是属性666'})),//通过重新渲染改变属性。
70、 document.getElementById('life ')
71、 );
72、 //ReactDOM.render(
73、 //react.dom.div (null,' hello '),//通过从新渲染的方式中移除组件,componentWillUnmount();
74、 //document . getelementbyid(' life ')
75、 //);
76、 },
77、 //依次测试组件的10个生命周期方法
78、 GetDefaultProps:function(){ //设置默认属性值。
79、 console . log(' my component-getDefaultProps ',arguments);
80、 返回{
81、 1:‘我是1’,
82、 2:‘我是2’,
83、 Pro3:“我3岁”
84、 };
85、 },
86、 GetInitialState:function(){ //初始化状态值
87、 console . log(' my component-getInitialState ',arguments);
88、 返回{
89、 状态1:“我是状态1”,
90、 状态2:“我是状态2”
91、 };
92、 },
93、 componentWillMount:function(){//组件将要渲染
94、 控制台。log('我的组件-组件将挂载',参数);
95、 },
96、 //-
97、 render:function(){ //组件正式渲染
98、 控制台。日志('我的组件-呈现',参数);
99、 返回做出反应.DOM.input({
100、 值:这个。道具。pro 1这个。道具。pro 2这个。状态。状态1,
101、 onChange:这个。改变,
102、 样式:{//样式写成对象的形式
103、 宽度:"400像素",
104、 颜色:'红色,
105、 }
106、 });
107、 },
108、 //-
109、 componentDidMount:function(){//组件渲染完成
110、 控制台。log('我的组件-组件安装',参数);
111、 },
112、 //-
113、 componentWillReceiveProps:function(){//在运行状态中更改了属性触发的方法
114、 控制台。日志('我的组件-componentWillReceiveProps ',参数);
115、 控制台。日志(这个。道具。pro1);//验证在拿取旧的小道具值
116、 },
117、 //-
118、 shouldComponentUpdate:function(){//给你一次打断更新的机会的方法
119、 控制台。log('我的组件-shouldComponentUpdate ',arguments);
120、 返回真实的
121、 //返回错误的
122、 },
123、 //-
124、 componentWillUpdate:function(){//组件将要更新,如果上一个方法没有阻断的话,就会执行到这个方法里来
125、 控制台。log('我的组件-组件更新',参数);
126、 },
127、 //-
128、 componentDidUpdate:function(old props,oldState){ //组件更新渲染完成,在第一次渲染时不执行
129、 控制台。log('我的组件-componentDidUpdate ',参数);
130、 //if(this.state.state1!='我是状态1')
131、 //这个。替换状态(旧状态);//替换组件
132、 },
133、 //-
134、 componentWillUnmount:function(){//组件将从数字正射影像图中卸载
135、 控制台。日志('我的组件-组件将被卸载',参数);
136、 },
137、 //-
138、 });
139、 //- 开始渲染组件-
140、 ReactDOM.render(
141、 做出反应. DOM.div({id:'何姿,},反应过来。createelement(我的组件,{pro1:'我是属性1'})),
142、 document.getElementById('life ')
143、 );
144、 /脚本
145、 /body
146、 /html
147、 查看运行结果,当程序运行后,会经历生命周期方法:
148、 1.初始化属性getDefaultProps,
149、 2.初始化状态getInitialState,
150、 3.组件将要渲染组件将安装,
151、 4.组件开始渲染渲染,
152、 5.渲染完成componentDidMount,
153、 渲染完成后有三种情况,如下:
本文到此结束,希望对大家有所帮助。
标签:
免责声明:本文由用户上传,如有侵权请联系删除!