react生命周期图(react生命周期)

你们好,最近小活发现有诸多的小伙伴们对于react生命周期图,react生命周期这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。1、先来看一张图,关于react中各个周期的流程2、从这张图中我们知道了组件的生命周期共有十个方

你们好,最近小活发现有诸多的小伙伴们对于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、情况三: 从DOM节点移除组件

17、方法10、属性或者状态都不改变,而是直接将渲染好的组件移除DOM节点,这会触发方法componentWillUnmount()

18、这样一来,组件的生命周期就直接结束了。除非下次再进行创建这个组件。

19、好了, 10个方法就说完了。

20、——————————————————————————-

21、下面提一下这些方法的特点。

22、1、object getDefaultProps().返回一个属性集合对象

23、首先是第一个getDefaultProps()方法,这个方法是在组件被创建的时候执行,然后等组件创建完成了才能创建其实例对象,然后再这个方法中设置的默认属性是会在所有实例中共享的。

24、它和面向对象编程的静态变量和方法很相似。

25、2、object getInitialState() ,返回一个state集合对象

26、再来说getInitialState方法,他是作用于组件的实例的,在实例创建时调用一次(在组件生命周期中只调用一次),用于初始化每个实例的state,此时可以访问this.props。

27、3、voidcomponentWillMount(),返回一个空对象

28、然后是组件将要被渲染方法componentWillMount(),这个方法执行一次,在初始化render之前执行,如果在这个方法内调用setState,render()知道state发生变化,并且只执行一次.而不会陷入无限的是循环里面去。

29、4、ReactElement render()方法,返回一个react组件

30、调用render()方法时,首先检查this.props和this.state返回一个子元素,子元素可以是DOM组件或者其他自定义复合控件的虚拟实现 ,如果不想渲染可以返回null或者false,这种场景下,react渲染一个<noscript>标签,当返回null或者false时,ReactDOM.findDOMNode(this)返回nullrender()方法是很纯净的,这就意味着不要在这个方法里初始化组件的state,每次执行时返回相同的值,不会读写DOM或者与服务器交互,如果必须如服务器交互,在componentDidMount()方法中实现或者其他生命周期的方法中实现,保持render()方法纯净使得服务器更准确,组件更简单

31、5、void componentDidMount(),返回值为空

32、在初始化render之后只执行一次,也就是初始化那次,(非初始化那次的话,组件渲染完成后,执行的都是组件更改完成方法componentDidUpdate())在这个方法里面可以访问任何组件,如果是组件嵌套,那么最里层的组件的componentDidMount()方法将会先执行,最外层组件的componentDidMount()方法就会最后执行。、从这个函数开始,就可以和 js 其他框架交互了,例如设置计时 setTimeout 或者 setInterval,或者发起网络请求

33、6、booleanshouldComponentUpdate() ,返回true或者false

34、boolean shouldComponentUpdate( object nextProps, object nextState }

35、这个方法在初始化render时不会执行,当props或者state发生变化时执行,并且是在render之前,当新的props或者state不需要更新组件时,返回false

36、shouldComponentUpdate: function(nextProps, nextState) { return nextProps.id !== this.props.id; }

37、当shouldComponentUpdate方法返回false时,就不会执行render()方法,componentWillUpdate和componentDidUpdate方法也不会被调用

38、默认情况下,shouldComponentUpdate方法返回true防止state快速变化时的问题,但是如果·state不变,props只读,可以直接覆盖shouldComponentUpdate用于比较props和state的变化,决定UI是否更新,当组件比较多时,使用这个方法能有效提高应用性能

39、7、void componentWillUpdate(),返回值为空

40、void componentWillUpdate( object nextProps, object nextState )

41、当props和state发生变化时执行,并且在render方法之前执行,当然初始化render时不执行该方法,需要特别注意的是,在这个函数里面,你就不能使用this.setState来修改状态。这个函数调用之后,就会把nextProps和nextState分别设置到this.props和this.state中。紧接着这个函数,就会调用render()来更新界面了

42、8、voidcomponentDidUpdate(),无返回值

43、void componentDidUpdate( object prevProps, object prevState )

44、组件更新结束之后执行,在初始化render时不执行

45、9、voidcomponentWillReceiveProps() ,无返回值

46、void componentWillReceiveProps( object nextProps )

47、当props发生变化时执行,初始化render时不执行,在这个回调函数里面,你可以根据属性的变化,通过调用this.setState()来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用

48、componentWillReceiveProps: function(nextProps) { this.setState({ likesIncreasing: nextProps.likeCount > this.props.likeCount }); }10、void componentWillUnmount(),无返回值。

49、10、 void componentWillUnmount()

50、当组件要被从界面上移除的时候,就会调用componentWillUnmount(),在这个函数中,可以做一些组件相关的清理工作,例如取消计时器、网络请求等

51、通过代码来观察运行状态

52、<html>

53、<head>

54、<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />

55、</head>

56、<body>

57、<script src=”js/react.js”></script>

58、<script src=”js/react-dom.js”></script>

59、<div id=”life”></div>

60、<script>

61、//——自定义组件 MyComponent

62、—–

63、var MyComponent=React.createClass({

64、Change:function(e){//当value改变时的onChange方法

65、this.setState({

66、state1:e.target.value,

67、});

68、ReactDOM.render(

69、React.DOM.div({id:”hezi”,},React.createElement(MyComponent,{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(“MyComponent–getDefaultProps”,arguments);

80、return {

81、pro1:”我是1″,

82、pro2:”我是2″,

83、pro3:”我是3″

84、};

85、},

86、getInitialState:function(){ //初始化状态值

87、console.log(“MyComponent–getInitialState”,arguments);

88、return{

89、state1:”我是状态1″,

90、state2:”我是状态2″

91、};

92、},

93、componentWillMount:function(){ //组件将要渲染

94、console.log(“MyComponent–componentWillMount”,arguments);

95、},

96、//——————

97、render:function(){ //组件正式渲染

98、console.log(“MyComponent–render”,arguments);

99、return React.DOM.input({

100、value:this.props.pro1+this.props.pro2+this.state.state1,

101、onChange:this.Change,

102、style:{ //style写成对象的形式

103、width:”400px”,

104、color:”red”,

105、}

106、});

107、},

108、//—————–

109、componentDidMount:function(){ //组件渲染完成

110、console.log(“MyComponent–componentDidMount”,arguments);

111、},

112、//—————-

113、componentWillReceiveProps:function(){ //在运行状态中更改了属性触发的方法

114、console.log(“MyComponent–componentWillReceiveProps”,arguments);

115、console.log(this.props.pro1);//验证在拿取旧的props值

116、},

117、//—————-

118、shouldComponentUpdate:function(){ //给你一次打断更新的机会的方法

119、console.log(“MyComponent–shouldComponentUpdate”,arguments);

120、return true;

121、//return false;

122、},

123、//—————–

124、componentWillUpdate:function(){ //组件将要更新,如果上一个方法没有阻断的话,就会执行到这个方法里来

125、console.log(“MyComponent–componentWillUpdate”,arguments);

126、},

127、//—————–

128、componentDidUpdate:function(oldProps,oldState){ //组件更新渲染完成,在第一次渲染时不执行

129、console.log(“MyComponent–componentDidUpdate”,arguments);

130、//if(this.state.state1!=”我是状态1″)

131、//this.replaceState(oldState); //替换组件

132、},

133、//—————–

134、componentWillUnmount:function(){ //组件将从DOM中卸载

135、console.log(“MyComponent–componentWillUnmount”,arguments);

136、},

137、//—————–

138、});

139、//——开始渲染组件—–

140、ReactDOM.render(

141、React.DOM.div({id:”hezi”,},React.createElement(MyComponent,{pro1:”我是属性1″})),

142、document.getElementById(“life”)

143、);

144、</script>

145、</body>

146、</html>

147、查看运行结果,当程序运行后,会经历生命周期方法:

148、1. 初始化属性 getDefaultProps,

149、2. 初始化状态 getInitialState,

150、3. 组件将要渲染 componentWillMount,

151、4. 组件开始渲染render,

152、5.渲染完成componentDidMount,

153、渲染完成后有三种情况,如下:

以上就是react生命周期这篇文章的一些介绍,希望对大家有所帮助。

(0)
小多多的头像小多多创始人

相关推荐

  • 颜朝雾谢平舟免费阅读无弹窗-颜朝雾谢平舟免费阅读小说完整版

    热门好书《颜朝雾谢平舟免费阅读》由著名作者谢平舟著作的女频风格的小说,小说的主角是颜朝雾谢平舟,书中感情线一波三折,却又顺理成章,整体阅读体验非常不错。下面看精彩试读:“离婚协议还没有解决。”谢平舟黑眼睛淡然,漫不经心地看向严朝武,“暂时不走。”女人什么也没说,只是望着雾蒙蒙的脸上,流露出一种与生俱来的优越感和傲慢,仿佛遇到了麻烦。原来谢平州对这个女人没什么可隐瞒的。…

    美文 2023年8月17日
  • 拳击的好处(成人练拳击的好处)

    本篇文章给大家谈谈拳击的好处,以及成人练拳击的好处对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。文章详情介绍:1、练拳击的好处2、打拳击有什么好处?3、拳击健身的好处4、经常打拳的好处练拳击的好处拳击不断提高你的身体 你的

    2023年5月23日
  • 环保知识常识手抄报(保护环境,从小事做起的手抄报怎么做)

    大家好,感谢邀请,今天来为大家分享一下环保知识常识手抄报的问题,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!本文目录保护环境,从小事做起的手抄报怎么做污染防治,绿色环保手抄报

    2023年9月12日
  • 李少荘(对于李少荘简单介绍)

    小伙伴们,你们好,今天云生来聊聊一篇关于李少荘,对于李少荘简单介绍的文章,网友们对这件事情都比较关注,那么现在就为大家来简单介绍下,希望对各位小伙伴们有所帮助。1、李少荘,2001毕业于英国伦敦”MiddlesexUniversity”艺

    2023年9月16日
  • 失业后的面试真实经历(失业的经历)

    各位网友们好,相信很多人对失业后的面试真实经历都不是特别的了解,因此呢,今天就来为大家分享下关于失业后的面试真实经历以及失业的经历的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年6月16日
  • 水光针副作用揭秘:美丽背后的隐忧!

    水光针副作用揭秘:美丽背后的隐忧!水光针是一种近年来备受瞩目的美容注射技术,通过将透明质酸等物质注入皮肤深层,以达到保湿、提亮肤色和改善细纹等效果。然而,就像任何其他医疗美容手段一样,水光针也存在着一些潜在的副作用和风险。本文将从五个方面详

    2023年12月19日
  • 哈萨克斯坦今日头条(哈萨克斯坦怎么样)

    各位网友们好,相信很多人对哈萨克斯坦今日头条都不是特别的了解,因此呢,今天就来为大家分享下关于哈萨克斯坦今日头条以及哈萨克斯坦怎么样的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年6月29日
  • 清华大学清华园是哪个门

    清华大学清华园是二校门。清华园就是清华大学的第二个校门,距今也有上百年的历史,这道美丽的古门上面的清华园三字可以说是每年吸引了不少的游客以及毕业季的大四学生们。清华园不仅仅是古代的一个建筑,如今更是清华大学不可或缺的一部分。二校门为清华最

    2023年12月13日
  • 送东阳马生序翻译注释(送东阳马生序翻译句子)

    余幼时即嗜学。家贫,无从致书以观,每假借于藏书之家,手自笔录,计日以还。天大寒,砚冰坚,手指不可屈伸,弗之怠。录毕,走送之,不敢稍逾约。以是人多以书假余,余因得遍观群书。既加冠,益…

    美文 2022年5月21日
  • win7怎么建立wifi连接,详细步骤解析

    本文目录一览Win7怎么建立WiFi连接(详细步骤解析)Win7怎么建立WiFi连接(详细步骤解析)步骤一:确认网络适配器驱动已安装在开始建立WiFi连接之前,您需要确认您的电脑已经安装了网络适配器驱动程序。如果您的电脑是新购买的,那么通

    2023年11月8日
  • 大蒜怎么吃最科学(大蒜怎么吃才最好)

    本篇文章给大家谈谈大蒜怎么吃最科学,以及大蒜怎么吃才最好对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。文章详情介绍:1、大蒜的吃法2、大蒜最佳食用方法3、大蒜怎么吃4、大蒜怎么吃最好5、怎样吃大蒜才有好处6、大蒜怎么吃最

    2023年5月12日
  • 错过爱情错过你全文在线阅读-顾知茜厉霆小说最新章节

    热门好书《错过爱情错过你》是来自厉霆最新创作的现代言情风格的小说,男女主角是顾知茜厉霆,小说文笔成熟,故事顺畅,阅读轻松。主要讲述“我还当顾知茜那个小贱皮藏着多贵重的东西,不过是一堆破铜烂铁,也不知道当时宝贵成什么样!”“来人,赶紧把这堆破铜烂铁扔了,看着就碍眼晦气,可别让这些脏污的东西触了我弟弟大婚的霉头!”随即,院里下人立马拿着扫帚过来清扫。…

    美文 2023年4月28日
  • 拿捏夫君后,婆婆全家都巴结我全文免费阅读-秦雨摇贺枫最新章节更新

    人气小说《拿捏夫君后,婆婆全家都巴结我》是来自佚名最新创作的重生风格的小说,故事中的主角是秦雨摇贺枫,文中的爱情故事凄美而纯洁,文笔极佳,实力推荐。下面是简介:大夏王朝。镇国公府。今天是镇国公府五公子贺枫和从五品大理寺左寺丞嫡女秦雨摇的大婚之日。十里红妆,三千镇国卫开路,满京城权贵相贺。

    2024年1月30日
  • 赠刘景文古诗(赠刘景文课文分析)

    各位网友们好,相信很多人对赠刘景文古诗都不是特别的了解,因此呢,今天就来为大家分享下关于赠刘景文古诗以及赠刘景文课文分析的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

    2023年7月16日
  • 腰疼应该看哪个科室,如何有效缓解腰痛症状

    一、腰疼看什么科?如果您感到腰部疼痛,首先应该去看的是骨科医生。骨科医生是专门负责处理骨骼疾病的医生,包括骨折、脱臼、软骨损伤、退行性疾病等等。腰部疼痛是一种常见的骨骼疾病,因此骨科医生是您最好的选择。另外,您也可以去看神经外科医生。神

    资讯 2023年11月28日