1.组件从创建到死亡它会经历一些特定的阶段。
2.React组件中包含一系列钩子函数(生命周期回调函数), 会在特定的时刻调用。
3.我们在定义组件时,会在特定的生命周期回调函数中,做特定的工作。

一、react生命周期(旧的)

生命周期的三个阶段(旧)

 1. 初始化阶段: 由ReactDOM.render()触发---初次渲染1.constructor()2.componentWillMount()3.render()4.componentDidMount() 常用一般在这个钩子中做一些初始化的事情,比如开启定时器、发送网络请求、订阅消息2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发1.shouldComponentUpdate()2.componentWillUpdate()3.render()   必须使用的一个4.componentDidUpdate()3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发1.componentWillUnmount()  常用一般在这个钩子中做一些收尾的事情,比如:关闭定时器、取消订阅消息



<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id="test"></div><!-- 引入react核心库 --><script src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script src="../js/babel.min.js"></script><!-- 引入prop-types,用于对组件标签属性进行限制 --><script src="../js/prop-types.js"></script><script type="text/babel">// 创建组件class Count extends React.Component {constructor(props) {console.log('Count---constructor')super(props);// 初始化状态this.state = {count: 0}}add = () => {const {count} = this.statethis.setState({count: count+1})}death = () => {ReactDOM.unmountComponentAtNode(document.getElementById('test'))}componentWillMount() {console.log('Count---componentWillMount')}componentDidMount() {console.log('Count---componentDidMount')}componentWillUnmount() {console.log('Count---componentWillUnmount')}shouldComponentUpdate(nextProps, nextState, nextContext) {console.log('Count---shouldComponentUpdate')return true}componentWillUpdate(nextProps, nextState, nextContext) {console.log('Count---componentWillUpdate')}componentDidUpdate(prevProps, prevState, snapshot) {console.log('Count---componentDidUpdate')}render() {console.log('Count---render')const {count} = this.statereturn(<div><h2>当前求和为:{count}</h2><button onClick={this.add}>点我+1</button><button onClick={this.death}>卸载组件</button></div>)}}// 渲染组件ReactDOM.render(<Count/>, document.getElementById('test'))</script>
</body>
</html>


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><div id="test"></div><!-- 引入react核心库 --><script src="../js/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script src="../js/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script src="../js/babel.min.js"></script><!-- 引入prop-types,用于对组件标签属性进行限制 --><script src="../js/prop-types.js"></script><script type="text/babel">class A extends React.Component{state = {carName: '奔驰'}changeCar = () => {this.setState({carName: '奥托'})}render() {return (<div><div>我是A组件</div><button onClick={this.changeCar}>换车</button><B carName={this.state.carName}></B></div>)}}class B extends React.Component{componentWillReceiveProps(nextProps, nextContext) {console.log('B---componentWillReceiveProps', nextProps)}shouldComponentUpdate(nextProps, nextState, nextContext) {console.log('B---shouldComponentUpdate')return true}componentWillUpdate(nextProps, nextState, nextContext) {console.log('B---componentWillUpdate')}componentDidUpdate(prevProps, prevState, snapshot) {console.log('B---componentDidUpdate')}render() {return (<div>我是B组件,从A组件中接收到的车是:{this.props.carName}</div>)}}// 渲染组件ReactDOM.render(<A/>, document.getElementById('test'))</script>
</body>
</html>

二、react生命周期(新的)

生命周期的三个阶段(新)
1. 初始化阶段: 由ReactDOM.render()触发---初次渲染1.constructor()2.getDerivedStateFromProps 3.render()4.componentDidMount()2. 更新阶段: 由组件内部this.setSate()或父组件重新render触发1.getDerivedStateFromProps2.shouldComponentUpdate()3.render()4.getSnapshotBeforeUpdate5.componentDidUpdate()3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发1.componentWillUnmount()




componentDidUpdate:


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><style>.list {width: 200px;height: 150px;background-color: skyblue;overflow: auto;}.news {height: 30px;}</style>
</head>
<body><div id="test"></div><!-- 引入react核心库 --><script src="../17.0.1/react.development.js"></script><!-- 引入react-dom,用于支持react操作DOM --><script src="../17.0.1/react-dom.development.js"></script><!-- 引入babel,用于将jsx转为js --><script src="../17.0.1/babel.min.js"></script><!-- 引入prop-types,用于对组件标签属性进行限制 --><script src="../17.0.1/prop-types.js"></script><script type="text/babel">class NewsList extends React.Component {state = {newsArr: []}componentDidMount() {setInterval(() => {// 获取原状态const {newsArr} = this.state// 模拟一条新闻const news = '新闻' + (newsArr.length + 1)// 更新状态this.setState({newsArr: [news, ...newsArr]})}, 1000)}getSnapshotBeforeUpdate(prevProps, prevState) {return this.refs.list.scrollHeight}componentDidUpdate(prevProps, prevState, height) {this.refs.list.scrollTop += this.refs.list.scrollHeight - height}render() {return (<div className="list" ref="list">{this.state.newsArr.map((n, index) => {return <div key={index} className="news">{n}</div>})}</div>)}}ReactDOM.render(<NewsList/>, document.getElementById('test'))</script>
</body>
</html>

三、重要的钩子

  1. render:初始化渲染或更新渲染调用
  2. componentDidMount:开启监听, 发送ajax请求
  3. componentWillUnmount:做一些收尾工作, 如: 清理定时器

四、即将废弃的钩子

  1. componentWillMount
  2. componentWillReceiveProps
  3. componentWillUpdate

现在使用会出现警告,下一个大版本需要加上UNSAFE_前缀才能使用,以后可能会被彻底废弃,不建议使用。

react 生命周期相关推荐

  1. 深入react技术栈(5):React生命周期

    我是歌谣 放弃很容易 但是坚持一定很酷 微信搜一搜前端小歌谣 React生命周期 挂载和卸载过程 组件得挂载 组件得卸载 数据更新过程 整体流程 文章参考深入学习React技术栈

  2. react学习(9)----react生命周期

    react生命周期1.1.constructor() constructor()中完成了React数据的初始化,它接受两个参数 :props和context,当想在函数内部使用这两个参数时 ,需使用s ...

  3. react生命周期(自己的方式理解)

    react生命周期(自己的方式理解) react的生命周期函数有:挂载,渲染/更新,卸载 首先要知道react生命周期最初始的要有哪些?最后生命中出现的又有哪些?我本人喜欢把react比作是一个人的一 ...

  4. 你不可不知道的React生命周期

    点小蓝字加关注! 作者:kim 来源:原创 写在前面 咱今天聊的话题是React生命周期,灵感来自于最近在网上发现一篇关于react生命周期的文章,里面记录的知识点竟然与小编所get到的有出入.作为一 ...

  5. ES6中的React生命周期详解

    太长时间没写react了,有点生.重新捡起来练练手. import React,{ Component } from 'react';class Demo extends Component {con ...

  6. react生命周期方法介绍

    react生命周期 react生命周期主要包括三个阶段:初始化阶段.运行中阶段.销毁阶段 react在不同的生命周期会触发不同的钩子函数 初始化阶段 getDefaultProps() 设置组件默认的 ...

  7. react生命周期详细介绍

    目录 挂载:在组件实例被创建并插入到dom中时,生命周期调用顺序如下 constructor componentWillMount getDerivedStateFromProps render co ...

  8. vue生命周期和react生命周期对比。

    生命周期 指的是组件从初始化开始到结束的过程 或者是生命周期是描述组件从开始到结束的过程,每个组件都具有生命周期,都对组件通过生命周期给予的钩子函数进行管理. 钩子函数 指的是系统某些状态和参数发生改 ...

  9. React、react生命周期、react生命周期运行过程、shouldComponentUpdate的用法

    React.react生命周期.react生命周期运行过程 1.创建阶段 constructor(){super()console.log('执行构造函数')this.state={num:1}}UN ...

  10. 【React生命周期】

    React 生命周期 从图上可以知道react 生命周期可以分为三个状态 挂载时 更新时 卸载时 挂载阶段 constructor :初始化阶段 可以接受来自super(props)或者父组件传递的p ...

最新文章

  1. Java中final关键字如何使用?
  2. 为什么我劝你不要当数据科学家?
  3. Vue 中的作用域插槽
  4. 浙江树人学院计算机专业好吗,浙江树人学院有哪些专业及什么专业好
  5. java堆内存与栈内存区别
  6. 如何判断线程运行结束
  7. swift获取通讯录
  8. Mysql笔记——DML
  9. 接口目标 java 1614953528
  10. 收藏 | 自监督视觉Transformer
  11. 2017.6.28 文艺平衡树 思考记录
  12. Jenkins系列四通过脚本方式部署maven项目,maven聚合项目,前端VUE的springboot项目
  13. 【Matlab学习笔记】【图像滤波去噪】高斯平滑滤波
  14. 安全清理大部分的C盘内存(一般10GB以上)
  15. ansys18.0安装教程
  16. Palm应用开发之三appinfo.json 文件详解
  17. 可拖拽的窗口(Vue)
  18. Unity实现多旋翼无人机的模拟飞行(物理引擎)
  19. 上海二手房价数据分析
  20. gmail无法登陆的解决!!

热门文章

  1. DLNA 实现 Multi-screen(T460s+华为M3)
  2. 课程思政案例----简道云零代码应用开发实训平台
  3. h3c无线管理 dns服务器,10-DNS配置指导
  4. android调用照相机拍照获取照片并…
  5. 国际短信如何更精准、更有效?
  6. 鲁迅有本事硬译ON-THE-FLY吗?(像狂风一样舞蹈,挣脱怀抱--汪峰意译)
  7. 春季行情“躁动” 量加在手“从容”
  8. 导出数据到excel中的问题
  9. 试用74LS194加必要的门电路实现4位环形计数器(要求能自启动, 电路越简单越好). 要求它的有效循环状态Q0Q1Q2Q3为 1000-0100-0010-0001-1000
  10. 踏上王者征途--scratch简易还原王者角色-马可波罗