工作中要对一个表格做再次更新, 可能是渲染后更新或者部分组件渲染之后, 对页面效果做处理

之前对react的理解, 仅仅停留在render渲染.

这次好好理解了下react的生命周期

1 react组件有三种状态 Mounted(已插入真实的DOM) Updating(正在被渲染) 和 Unmounted已移除真实DOM

2 每个状态有两种处理方法 will(进入状态之前调用) 和 did(进入状态之后调用)

3 三种状态总共有5种处理方法, componentWillMount(插入真实DOM之前调用)  componentDidMount(插入真实DOM之后调用)  componentWillUpdate(被渲染之前调用) componentDidUpdate(渲染之后调用) 和 componentWillUnmount(移除之前调用)

4 当然还有组件初始方法: getDefaultProps(获取默认属性) 和 getInitialState(获取初始状态),

5 还有两种特殊方法: componentWillReceiveProps(object nextProps)(已加载的组件收到新的参数时调用) 和 shouldComponentUpdate(object nextProps, object nextState)(判断组件是否需要重新渲染时调用)

生命周期

1 当一个组件被调用的时候, 会先调用改组件的初始方法getDefaultProps和getInitialState,

2 然后执行componentWillMount(即将渲染)

3 进行渲染到DOM上, 渲染完成之后触发componentDidMount(渲染完成)方法

当props发生变化的时候

1.1 先触发componentWillReceiveProps,

1.2 然后利用shouldComponentUpdate判断是否需要重新渲染

1.3 如果不需要渲染,走2->3 ; 如果不需要渲染,状态不变,不执行其他操作

当state发生变化的时候

2.1 直接利用shouldComponentUpdate判断是否需要重新渲染

2.2 如果不需要渲染,走2->3 ; 如果不需要渲染,状态不变,不执行其他操作

当组件被移除unmount的时候

3.1 直接执行componentWillUnmount(移除前执行)

3.2 组件从DOM树移除

//getDefaultProps,组件属性的默认值,只会被调用一次,返回的对象, 可以设置默认的props值
var Hello = React.createClass({
getDefaultProps: function(){
return {name:'yyf',git:'dbms'};
}
});
//也可以在调用组件的时候,设置props
var data = [{name:'yyf'}];
<Hello data> //getInitialState,调用有且只有一次,初始化组件的state,这个方法里可以方法组件的props
//每个组件都有自己的getInitialState,区别是statue只存在于组件内部,props可以在所有实例中调用
//getInitialState和getDefaultProps是有区别
//getDefaultProps对组件类只调用一次,后续该组件类的应该不会再调用
//getDefaultProps每个组件实例都会调用,且只调用一次
//修改组件的state,使用this.setState设置
var Hello = React.createClass({
getDefaultProps: function(){
return {name:'yyf',git:'dbms'};
},
getInitialState: function() {
return {liked: false};
}
}); //正常的生命周期, 即组件首次实例化
//1:getDefaultProps 2:getInitialState 3:componentWillMount 4:render 5:componentDidMount
//componentWillMount在首次渲染之前调用,是render之前最后一次修改state的机会
//componentDidMount如果组件在服务端被实例化,不会调用, 反之在客户端是可以的
//componentDidMount被调用时,已经渲染出真实的的DOM,可以在该方法中通过this.getDOMNode()访问真实的DOM,
//推荐使用React.findDOMNode() //state修改
//1:shouldComponentUpdate 2:componentWillUpdate 3:render 4:componentDidUpdate //render
//会创建一个虚拟DOM, 用来表示组件的输出,render是唯一一个必须的方法,
//render中,只能通过this.props和this.state获取数据,不能进行修改
//render中,只能返回null,false或者任何react组件
//render中,只能有一个顶级组件,不能返回一组组件
//render中,不能改变组件的状态
//render中,不能修改DOM输出
//render方法返回的结果并不是真正的DOM元素,而是一个虚拟的表现,类似于一个DOM tree的结构的对象。react之所以效率高,就是这个原因。 //由于组件不是真实的DOM,只是存在于内存中的一种数据结构,叫做虚拟DOM,virtual DOM,只有当插入文档后才会变成真实的DOM
//有时需要从组件获取真实DOM节点,需要用到ref属性
var Work = React.createClass({
render: function(){
this.getDOMNode();//由于render时,组件还未渲染出真实的DOM,这里会报错
return <div ref='test'></div>
},
componentDidMount: function(){
var test = this.refs.test.findDOMNode();
//这里是有效的,可以访问到test节点
}
});
//注意 this.refs.[refName]获取的是真实DOM, 必须等到DOM插入文档之后,才能使用 //组件渲染之后,通过一些事件,导致组件状态改变,
//1:componentWillReceiveProps 2:shouldComponentUpdate 3:componentWillUpdate
//4:render 5:componentDidUpdate
//如果通过父组件更改组件的props,componentWillReceiveProps就会被调用,可以在这个方法里面修改state,以便触发render来重新渲染
//如果确定组件的props和state的改变,不需要重新渲染,可以让shouldComponentUpdate方法return FALSE,来阻止组件再次渲染,
//后面的render,componentWillUpdate和componentDidUpdate不会执行
//shouldComponentUpdate 默认返回TRUE
//componentWillUpdate和componentWillMount类似,在组件的props和state改变即将重新渲染之前执行
//componentWillUpdate里面不要更新state和props
//componentDidUpdate和componentDidMount类似,在组件的props和state改变且渲染完成后执行 //移除组件
//直接执行componentWillUnmout,
//移除之后再次调用组件时, 1:getInitialState 2:componentWillMount 3:render 4:componentDidMount

感谢:

https://segmentfault.com/a/1190000004168886

http://www.cnblogs.com/niconi/p/5840769.html

react 渲染顺序的更多相关文章

  1. SKNode的渲染顺序

    [SKNode的渲染顺序] SKNode的zPosition属性,指定相对于其父视图的z轴坐标. The default value is 0.0. The positive z axis is pr ...

  2. KING_Unity学习之UGUI_Canvas渲染顺序以及层次关系总结

    http://blog.csdn.net/kingsea168/article/details/50252733 之前一直用NGUI开发界面,但看到现在的unity的新版本的UGUI也不错,这几天专门 ...

  3. react 渲染

    目录 React渲染 createElement的三个参数 element如何生成真实节点 ReactDOMComponent 作用 ReactCompositeComponentWrapper 作用 ...

  4. 你所要掌握的最简单基础的React渲染优化

    一.React的渲染机制 要掌握一两项React-render优化的方法不难,但是非常重要.无论是在实际项目中的一个小细节,还是迎合'面试官'的口味 1.1 触发Render 我们知道React要更新 ...

  5. react渲染原理深度解析

    https://mp.weixin.qq.com/s/aM-SkTsQrgruuf5wy3xVmQ   原文件地址 [第1392期]React从渲染原理到性能优化(二)-- 更新渲染 黄琼 前端早读课 ...

  6. 【React】393 深入了解React 渲染原理及性能优化

    如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...

  7. 十六、React 渲染数据注意事项、以及react-router4.x中使用js跳转路由(登录成功自动跳转首页)

    一.React加载数据流程回顾 先看上一节的产品详情代码:https://blog.csdn.net/u010132177/article/details/103184176 [Pcontent.js ...

  8. React渲染问题研究以及Immutable的应用

    写在前面 这里主要介绍自己在React开发中的一些总结,关于react的渲染问题的一点研究. 另外本人一直希望在React项目中尝试使用,因此在之前已经介绍过immutable的API,可以参看这里I ...

  9. SVG渲染顺序及z轴显示问题(zIndex)

    SVG是严格按照定义元素的顺序来渲染的,这个与HTML靠z-index值来控制分层不一样. 在SVG中,写在前面的元素先被渲染,写在后面的元素后被渲染.后渲染的元素会覆盖前面的元素,虽然有时候受透明度 ...

随机推荐

  1. jQuery中$.get()和$.post()的异同点

    相同点:两者都是向服务器异步请求数据的. 不同点: 1.$.get() 方法使用GET方法来进行异步请求的,$.post() 方法使用POST方法来进行异步请求的. 2.如果前端使用$.get() 方 ...

  2. windows 10 自动升级后环境变量无效

    上个礼拜放假的时候,win10提示需要升级,我当时随手就一点更新并关机...今天,在启动项目时候尴尬了: D:\project\js\iam-web\code\iam-web>npm run d ...

  3. 从excel表中生成批量SQL

    excel表格中有许多数据,需要将数据导入数据库中,又不能一个一个手工录入,可以生成SQL,来批量操作.   ="insert into Log_loginUser (LogID, Logi ...

  4. mysql清空表数据并重置自增ID

    mysql清空表数据并重置自增ID: ## 查看mysql> select * from work_order_company;mysql> show create table work_ ...

  5. 361-基于6U VPX TMS320C6678+XC7K325T 的信号处理板

    基于6U VPX TMS320C6678+XC7K325T 的信号处理板 一.板卡概述 本板卡基于6U VPX结构设计无线电信号处理平台.板卡包含1片C6678芯片,1片 FPGA XC7K325T- ...

  6. 《Android程序设计》课程学习

    一.课件内容 2019-2010-1学期课件,点击查看 二.作业相关 上交作业的方法 访问ftp://192.168.42.254:22,登录后找到自己的姓名文件夹,放入作业即可.登录账号为stu2, ...

  7. OGG-01169

    OGG-01169  Oracle GoldenGate Delivery for Oracle, dwarer.prm:  Encountered an update where all key c ...

  8. vue2.0  之 directive指令 (自定义)

    指令 一.定义: 指令只一种可以附加到DOM元素的微命令(tiny commands). 它们通常以"v-"作为前缀, 以方便Vue知道你在使用一种特殊的标记, 从而确保语法的一致 ...

  9. Tenka1 Programmer Contest D - Crossing

    链接 Tenka1 Programmer Contest D - Crossing 给定\(n\),要求构造\(k\)个集合\({S_k}\),使得\(1\)到\(n\)中每个元素均在集合中出现两次, ...

  10. 查看ubuntu系统信息

    root@k8s001:~/go/src/k8s.io/kubernetes# cat /etc/*release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=16.04 DI ...