生命周期

概述

意义:组件的生命周期有助于理解组件的运行方式,完成更复杂的组件功能、分析组件错误原因等

组件的生命周期: 组件从被创建到挂载到页面中运行,再到组件不在时卸载的过程

生命周期的每个阶段总是伴随着一些方法调用,这些方法就是生命周期的钩子函数

构造函数的作用:为开发人员在不同阶段操作组件提供了实际

组件生命周期的三个阶段

  1. 1 - 创建时(挂载阶段)
  2. 执行时机: 组件创建时(页面加载时)
  3. 执行顺序: constructor() --> render() --> componentDidMount()
  4. 生命周期钩子函数:
  5. constructor()
  6. 初始化state
  7. 为事件处理程序绑定this
  8. render()
  9. 渲染UI
  10. componentDidMount()
  11. 进行DOM操作
  12. 发送ajax请求

2、 运行阶段

触发组件更新的三种情况

  1. 执行条件:
  2. 1setState()
  3. 2forceUpdata()
  4. 3、组件接收到新的props
  5. render() --> componentDidMount()

组件更新

  1. componentDidUpdate()
  2. 拿到上一次的props -- prevProps
  3. 拿到这一次的props -- this.props

3、卸载阶段

  1. 钩子函数:
  2. componentWillUnmount
  3. 执行清理工作,防止内存泄漏
  4. getDerivedStateFromProps()`
  5. - getDerivedStateFromProps 会在调用 render 方法之前调用,并且在初始挂载及后续更新时都会被调用。它应返回一个对象来更新 state,如果返回 null 则不更新任何内容
  6. - 不管原因是什么,都会在每次渲染前触发此方法
  7. shouldComponentUpdate()
  8. - 根据 shouldComponentUpdate() 的返回值,判断 React 组件的输出是否受当前 state 或 props 更改的影响。默认行为是 state 每次发生变化组件都会重新渲染
  9. - 当 props 或 state 发生变化时,shouldComponentUpdate() 会在渲染执行之前被调用。返回值默认为 true
  10. getSnapshotBeforeUpdate()
  11. - getSnapshotBeforeUpdate() 在最近一次渲染输出(提交到 DOM 节点)之前调用。它使得组件能在发生更改之前从 DOM 中捕获一些信息(例如,滚动位置)。此生命周期的任何返回值将作为参数传递给 componentDidUpdate()
  12. - 此用法并不常见,但它可能出现在 UI 处理中,如需要以特殊方式处理滚动位置的聊天线程等
  1. class Parent extends React.Component {
  2. constructor() {
  3. console.log( ' constructor ');
  4. super();
  5. this.state = {
  6. count: 0
  7. }
  8. }
  9. handleClick = () => {
  10. this.setState({
  11. count: this.state.count + 1
  12. })
  13. };
  14. componentDidMount() {
  15. console.log('componentDidMount');
  16. }
  17. render() {
  18. console.log( ' render ')
  19. return (
  20. <div>
  21. {/!* 调用子组件, 传递参数给子组件*!/}
  22. {
  23. this.state.count >= 3 ?
  24. <p>over</p> :
  25. <Child count={this.state.count} />
  26. }
  27. <button onClick={this.handleClick}>click + 1</button>
  28. </div>
  29. )
  30. }
  31. }
  32. class Child extends React.Component {
  33. componentDidMount() {
  34. // 设置定时器
  35. this.timerID = setInterval(() => {
  36. console.log('定时炸弹开始')
  37. }, 500)
  38. }
  39. componentWillUnmount() {
  40. console.log('卸载组件钩子函数');
  41. // 清除定时器 不清理会造成内存泄漏
  42. clearInterval(this.timerID)
  43. }
  44. render() {
  45. console.log( 'child render 钩子函数')
  46. return (
  47. <div>
  48. <p>count: {this.props.count}</p>
  49. </div>
  50. )
  51. }
  52. }
  53. ReactDOM.render(<Parent/>, document.getElementById('root'))

【React -- 4/100】 生命周期的更多相关文章

  1. react学习小结(生命周期- 实例化时期 - 存在期- 销毁时期)

    react学习小结   本文是我学习react的阶段性小结,如果看官你是react资深玩家,那么还请就此打住移步他处,如果你想给一些建议和指导,那么还请轻拍~ 目前团队内对react的使用非常普遍,之 ...

  2. React组件和生命周期简介

        React 简介----React 是 Facebook 出品的一套颠覆式的前端开发类库.为什么说它是颠覆式的呢? 内存维护虚拟 DOM 对于传统的 DOM 维护,我们的步骤可能是:1.初始化 ...

  3. 2. React组件的生命周期

    2. React组件的生命周期 使用React开发时候用到最多的就是React的组件了,通过继承React.Component,加入constructor构造函数,实现Render方法即可.这当中Re ...

  4. Vue与React的异同 -生命周期

    vue的生命周期 创建前 beforeCreate 创建   create 挂载前 beforeMount 挂载 mounted 更新前 beforeUpdate 更新 updated 销毁前 bef ...

  5. React 组件的生命周期方法

    React 组件的生命周期方法 按渲染顺序: 1: componentWillMount() – 在渲染之前执行,在客户端和服务器端都会执行. 2: componentDidMount() – 仅在第 ...

  6. react第三单元(react组件的生命周期)

    第三单元(react组件的生命周期) #课程目标 灵活掌握react组件的生命周期以及组件的活动过程. 能够灵活使用react的生命周期 #知识点 react的类组件的生命周期分为三个阶段 实例期 存 ...

  7. React 之 组件生命周期

    React 之 组件生命周期 理解1) 组件对象从创建到死亡它会经历特定的生命周期阶段2) React组件对象包含一系列的勾子函数(生命周期回调函数), 在生命周期特定时刻回调3) 我们在定义组件时, ...

  8. react组件的生命周期

    写在前面: 阅读了多遍文章之后,自己总结了一个.一遍加强记忆,和日后回顾. 一.实例化(初始化) var Button = React.createClass({ getInitialState: f ...

  9. React Native 之生命周期

    前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...

  10. [React] 多组件生命周期转换关系

    前段时间一直在基于React做开发,最近得空做一些总结,防止以后踩坑. 言归正传,React生命周期是React组件运行的基础,本文主要是归纳多组件平行.嵌套时,生命周期转换关系. 生命周期 Reac ...

随机推荐

  1. mac osx终端批量删除文件

    sudo su cd / find ./ -name "*.html" -exec rm -rf {} \;  注意 {}和\;之间有空格 find [目录名] -name &qu ...

  2. substring()方法是如何工作

    1.substring()方法做了什么? substring(beginIndex,endIndex)方法返回一个从beginIndex到endIndex-1的字符串 String x = " ...

  3. springboot+druid+mybatis-Plus 配置详解

    网上找了很多关于springboot+druid+mybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案.折腾了好几天终于自己配置通过了. springboot的pom文件 <pa ...

  4. 树状数组的理解(前缀和 and 差分)

    二更—— 有神仙反映数星星那个题外链炸了,我决定把图给你们粘一下,汉语翻译的话在一本通提高篇的树状数组那一章里有,同时也修改了一些汉语语法的错误 这段时间学了线段树组,当神仙们都在学kmp和hash的 ...

  5. 十九、RF接口测试汇总(一)

    搭建项目:转自  http://chuansong.me/n/1858477 A.请求方式为get请求 方式一:导入RequestsLibrary库,get request    [ alias | ...

  6. 八、RF的内置变量

    1.表示“空”的变量 ${EMPTY} 空 适用输入空的案例 2.表示“空格”的变量 ${SPACE} 空格,如果是需要5个空格可以这样写${SPACE*5} 3.目录的绝对路径 ${CURDIR} ...

  7. leetcode 234 回文链表 Palindrome Linked List

    要求用O(n)时间,和O(1)空间,因此思路是用本身链表进行判断,既然考虑回文,本方法思想是先遍历一次求链表长度,然后翻转前半部分链表:然后同时对前半部分链表和后半部分链表遍历,来判断对应节点的值是否 ...

  8. 网站模板-Layui:Layui

    ylbtech-网站模板-Layui:百科 layui,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即用.其外在极简,却又不失饱满的 ...

  9. [VBA]删除多余工作表

    sub 删除多余工作表() Dim i As Integer Application.DisplayAlerts = False For i = Worksheets.Count To 1 step ...

  10. Vue知识整理14:组件基础

    组件:可以复用的实例.使用 v-component来实现 2.通过props属性添加相应的属性,并且在模板中渲染 当模板中包含多个组件时,则需要用一个div来包裹起来.如下: 可以将原来的的点击事件, ...