生命周期方法


组件的生命周期分成三个状态:

  • 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

  1. 服务器端和客户端都只调用一次,在初始化渲染执行之前立刻调用。
  2. 如果在这个方法内调用 setStaterender() 将会感知到更新后的 state
  3. 用法
    React.createClass({componentWillMount() {...}
    });

挂载: componentDidMount

  1. 在初始化渲染执行之后立刻调用一次,仅客户端有效(服务器端不会调用)
  2. 在生命周期中的这个时间点,组件拥有一个 DOM 展现,你可以通过 this.getDOMNode() 来获取相应 DOM 节点
  3. 发送 AJAX 请求,可以在该方法中执行这些操作
  4. 例子
    React.createClass({componentDidMount() {...}
    });

移除: componentWillUnmount

  1. 在组件从 DOM 中移除的时候立刻被调用
  2. 在该方法中执行任何必要的清理,比如无效的定时器,或者清除在 componentDidMount 中创建的 DOM 元素
  3. 例子
    React.createClass({componentWillUnmount() {...}
    });

更新: componentWillReceiveProps

  1. 在组件接收到新的 props 的时候调用 ; 在初始化渲染的时候,该方法不会调用
  2. 用此函数可以作为 react 在 prop 传入之后, render() 渲染之前更新 state
  3. 老的 props 可以通过 this.props 获取到
  4. 在该函数中调用 this.setState() 将不会引起第二次渲染。
  5. 注意:对于 state,没有相似的方法,如果需要在 state 改变的时候执行一些操作,请使用 componentWillUpdate
  6. 例子
    React.createClass({componentWillReceiveProps(nextProps) {this.setState({})}
    });

更新: shouldComponentUpdate

  1. 返回:boolean; 参数1:object nextProps ; 参数2:object nextState
  2. 在接收到新的 props 或者 state,将要渲染之前调用 ; 该方法在初始化渲染的时候不会调用 ; 使用 forceUpdate 方法的时候也不会
  3. 如果确定新的 props 和 state 不会导致组件更新,则此处应该 返回 false。默认情况下,shouldComponentUpdate 总会返回 true
  4. 如果 shouldComponentUpdate返回false,则 render() 将不会执行,直到下一次 state 改变。另外,componentWillUpdate 和 componentDidUpdate 也不会被调用
  5. 例子
    React.createClass({shouldComponentUpdate(nextProps, nextState) {return false}
    });

更新: componentWillUpdate

  1. 参数1:object nextProps  参数2:object nextState
  2. 在接收到新的 props 或者 state 之前立刻调用。在初始化渲染的时候该方法不会被调用。
  3. 注意:你不能在刚方法中使用 this.setState()。如果需要更新 state 来响应某个 prop 的改变,请使用 componentWillReceiveProps
  4. 例子
    React.createClass({componentWillUpdate(nextProps, nextState) {...}
    });

更新: componentDidUpdate

  1. 参数1:object prevProps  ; 参数2:object prevState
  2. 在组件的更新已经同步到 DOM 中之后立刻被调用。该方法不会在初始化渲染的时候调用
  3. 使用该方法可以在组件更新之后操作 DOM 元素。
  4. 注意:为了兼容 v0.9,DOM 节点会作为最后一个参数传入。如果使用这个方法,你仍然可以使用 this.getDOMNode()来访问 DOM 节点
  5. 例子
    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(例如 childrenparamslocation 等数据), 所以 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 生命周期相关推荐

  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. CSE 3100 Systems Programming
  2. 计算机考试用远程桌面,职称计算机考试:教你体验XP远程桌面多用户登录
  3. 日志服务器搭建及配置_[ELK入门到实践笔记] 一、通过rsyslog搭建集中日志服务器...
  4. 【Linux开发】linux设备驱动归纳总结(二):模块的相关基础概念
  5. VS2008下最新X264(svn 2009.9)编译不过的解决办法
  6. 面向对象的接口类 以及鸭子类型
  7. avlib java_fatal error: libavutil/avconfig.h: No such file...
  8. HTML+CSS+JS实现 ❤️圆形倒数秒计时器❤️
  9. 暑期训练日志----2018.8.10
  10. css中字间距调整(转)
  11. u-boot移植随笔:u-boot启动流程简图
  12. android spp协议,Android蓝牙开发SPP协议通信
  13. 19个程序员接私活平台汇总升级版!你有技术就有钱!
  14. 大数据全样而非抽样原理_干货 | 大数据思维的十大核心原理(二)
  15. WPF解析Fnt字体
  16. Element UI的数据表格数据检索方法
  17. PHP经典实用案例1000个
  18. MapReduce名词解释
  19. 期货大佬给交易者的交易箴言。
  20. 中职学校新增计算机专业申请书,中职学校计算机专业学生的培养

热门文章

  1. 计算文件大小与文件行数
  2. 【C/C++】成员变量的初始化顺序
  3. java-背包的实现
  4. 自适应布局 的 解决方案
  5. java hashMap缓存简单实现
  6. Andrew Ng 的 Machine Learning 课程学习 (week4) Multi-class Classification and Neural Networks
  7. jsp版本的环境变量集合
  8. libiconv字符集转换库在C#中的使用
  9. git推送tag到远端服务器
  10. nhibernate配置教程