React 生命周期
生命周期方法
组件的生命周期分成三个状态:
- Mounting:已插入真实 DOM
- Updating:正在被重新渲染
- Unmounting:已移出真实 DOM
React 为每个状态都提供了两种处理函数,will
函数在进入状态之前调用,did
函数在进入状态之后调用,三种状态共计五种处理函数。
- componentWillMount()
- componentDidMount()
- componentWillUpdate(object nextProps, object nextState)
- componentDidUpdate(object prevProps, object prevState)
- componentWillUnmount()
此外,React 还提供两种特殊状态的处理函数。
- componentWillReceiveProps(object nextProps):已加载组件收到新的参数时调用
- shouldComponentUpdate(object nextProps, object nextState):组件判断是否重新渲染时调用
挂载:componentWillMount
- 服务器端和客户端都只调用一次,在初始化渲染执行之前立刻调用。
- 如果在这个方法内调用
setState
,render()
将会感知到更新后的 state - 用法
React.createClass({componentWillMount() {...} });
挂载: componentDidMount
- 在初始化渲染执行之后立刻调用一次,仅客户端有效(服务器端不会调用)
- 在生命周期中的这个时间点,组件拥有一个 DOM 展现,你可以通过
this.getDOMNode()
来获取相应 DOM 节点 - 发送 AJAX 请求,可以在该方法中执行这些操作
- 例子
React.createClass({componentDidMount() {...} });
移除: componentWillUnmount
- 在组件从 DOM 中移除的时候立刻被调用
- 在该方法中执行任何必要的清理,比如无效的定时器,或者清除在
componentDidMount
中创建的 DOM 元素 - 例子
React.createClass({componentWillUnmount() {...} });
更新: componentWillReceiveProps
- 在组件接收到新的 props 的时候调用 ; 在初始化渲染的时候,该方法不会调用
- 用此函数可以作为 react 在 prop 传入之后,
render()
渲染之前更新 state - 老的 props 可以通过
this.props
获取到 - 在该函数中调用
this.setState()
将不会引起第二次渲染。 - 注意:对于 state,没有相似的方法,如果需要在 state 改变的时候执行一些操作,请使用
componentWillUpdate
。 - 例子
React.createClass({componentWillReceiveProps(nextProps) {this.setState({})} });
更新: shouldComponentUpdate
- 返回:boolean; 参数1:object nextProps ; 参数2:object nextState
- 在接收到新的 props 或者 state,将要渲染之前调用 ; 该方法在初始化渲染的时候不会调用 ; 使用
forceUpdate
方法的时候也不会 - 如果确定新的 props 和 state 不会导致组件更新,则此处应该
返回 false
。默认情况下,shouldComponentUpdate
总会返回 true - 如果 shouldComponentUpdate返回false,则 render() 将不会执行,直到下一次 state 改变。另外,componentWillUpdate 和 componentDidUpdate 也不会被调用
- 例子
React.createClass({shouldComponentUpdate(nextProps, nextState) {return false} });
更新: componentWillUpdate
- 参数1:object nextProps 参数2:object nextState
- 在接收到新的 props 或者 state 之前立刻调用。在初始化渲染的时候该方法不会被调用。
- 注意:你不能在刚方法中使用 this.setState()。如果需要更新 state 来响应某个 prop 的改变,请使用 componentWillReceiveProps
- 例子
React.createClass({componentWillUpdate(nextProps, nextState) {...} });
更新: componentDidUpdate
- 参数1:object prevProps ; 参数2:object prevState
- 在组件的更新已经同步到 DOM 中之后立刻被调用。该方法不会在初始化渲染的时候调用
- 使用该方法可以在组件更新之后操作 DOM 元素。
- 注意:为了兼容 v0.9,DOM 节点会作为最后一个参数传入。如果使用这个方法,你仍然可以使用
this.getDOMNode()
来访问 DOM 节点 - 例子
React.createClass({componentDidUpdate(nextProps, nextState) {...} });
例子: 路由切换时,组件生命周期的变化情况
路由配置如下:
<Route path="/" component={App}><IndexRoute component={Home}/><Route path="invoices/:invoiceId" component={Invoice}/><Route path="accounts/:accountId" component={Account}/> </Route>
1. 当用户打开应用的 '/' 页面
2. 当用户从 '/' 跳转到 '/invoice/123'
App
从 router 中接收到新的 props(例如children
、params
、location
等数据), 所以App
触发了componentWillReceiveProps
和componentDidUpdate
两个生命周期方法
Home
不再被渲染,所以它将被移除,触发 componentWillUnmount
Invoice
首次被挂载 触发 componentWillMount 和 componentDidMount
3. 当用户从 /invoice/123
跳转到 /invoice/789
- 所有的组件之前都已经被挂载, 所以只是从 router 更新了 props.
4. 当从 /invoice/789
跳转到 /accounts/123
转载于:https://www.cnblogs.com/vs1435/p/7341255.html
React 生命周期相关推荐
- 深入react技术栈(5):React生命周期
我是歌谣 放弃很容易 但是坚持一定很酷 微信搜一搜前端小歌谣 React生命周期 挂载和卸载过程 组件得挂载 组件得卸载 数据更新过程 整体流程 文章参考深入学习React技术栈
- react学习(9)----react生命周期
react生命周期1.1.constructor() constructor()中完成了React数据的初始化,它接受两个参数 :props和context,当想在函数内部使用这两个参数时 ,需使用s ...
- react生命周期(自己的方式理解)
react生命周期(自己的方式理解) react的生命周期函数有:挂载,渲染/更新,卸载 首先要知道react生命周期最初始的要有哪些?最后生命中出现的又有哪些?我本人喜欢把react比作是一个人的一 ...
- 你不可不知道的React生命周期
点小蓝字加关注! 作者:kim 来源:原创 写在前面 咱今天聊的话题是React生命周期,灵感来自于最近在网上发现一篇关于react生命周期的文章,里面记录的知识点竟然与小编所get到的有出入.作为一 ...
- ES6中的React生命周期详解
太长时间没写react了,有点生.重新捡起来练练手. import React,{ Component } from 'react';class Demo extends Component {con ...
- react生命周期方法介绍
react生命周期 react生命周期主要包括三个阶段:初始化阶段.运行中阶段.销毁阶段 react在不同的生命周期会触发不同的钩子函数 初始化阶段 getDefaultProps() 设置组件默认的 ...
- react生命周期详细介绍
目录 挂载:在组件实例被创建并插入到dom中时,生命周期调用顺序如下 constructor componentWillMount getDerivedStateFromProps render co ...
- vue生命周期和react生命周期对比。
生命周期 指的是组件从初始化开始到结束的过程 或者是生命周期是描述组件从开始到结束的过程,每个组件都具有生命周期,都对组件通过生命周期给予的钩子函数进行管理. 钩子函数 指的是系统某些状态和参数发生改 ...
- React、react生命周期、react生命周期运行过程、shouldComponentUpdate的用法
React.react生命周期.react生命周期运行过程 1.创建阶段 constructor(){super()console.log('执行构造函数')this.state={num:1}}UN ...
- 【React生命周期】
React 生命周期 从图上可以知道react 生命周期可以分为三个状态 挂载时 更新时 卸载时 挂载阶段 constructor :初始化阶段 可以接受来自super(props)或者父组件传递的p ...
最新文章
- CSE 3100 Systems Programming
- 计算机考试用远程桌面,职称计算机考试:教你体验XP远程桌面多用户登录
- 日志服务器搭建及配置_[ELK入门到实践笔记] 一、通过rsyslog搭建集中日志服务器...
- 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念
- VS2008下最新X264(svn 2009.9)编译不过的解决办法
- 面向对象的接口类 以及鸭子类型
- avlib java_fatal error: libavutil/avconfig.h: No such file...
- HTML+CSS+JS实现 ❤️圆形倒数秒计时器❤️
- 暑期训练日志----2018.8.10
- css中字间距调整(转)
- u-boot移植随笔:u-boot启动流程简图
- android spp协议,Android蓝牙开发SPP协议通信
- 19个程序员接私活平台汇总升级版!你有技术就有钱!
- 大数据全样而非抽样原理_干货 | 大数据思维的十大核心原理(二)
- WPF解析Fnt字体
- Element UI的数据表格数据检索方法
- PHP经典实用案例1000个
- MapReduce名词解释
- 期货大佬给交易者的交易箴言。
- 中职学校新增计算机专业申请书,中职学校计算机专业学生的培养