vue生命周期和react生命周期对比【推荐】


Posted in Javascript onSeptember 19, 2018

个人认为,react和vue的业务逻辑是差不多,vue在react上封装了更简洁的方法,使用起来更加的便捷,如:提供了便捷的指令(v-for,v-if,v-model),还提供了更多的属性(computed,watch),我还是比较喜欢用react的,更接近js原生,更容易于理解它。

一 vue的生命周期如下图所示(很清晰)初始化、编译、更新、销毁

vue生命周期和react生命周期对比【推荐】

二 vue生命周期的栗子

 注意触发vue的created事件以后,this便指向vue实例,这点很重要

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>vue生命周期</title>
    <script src="../js/vue.js"></script>
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  </head>
  <body>
    <div class="test" style="border: 1px black dashed;padding: 8px;">
      {{a}}
    </div>
    <div class="test2" style="border: 1px red solid;margin-top: 10px;padding: 8px;">
      我是内容二
    </div>
    <script type="text/javascript">
      var myVue = new Vue({
        el: ".test",
        data: {
          a: "我是内容,在控制台输入myVue.a=123456,可以改变我的值"
        },
        created: function () { 
          //在实例创建之后同步调用。此时实例已经结束解析选项,这意味着已建立:数据绑定,计算属性,方法,watcher/事件回调。
          //但是还没有开始 DOM 编译,$el 还不存在,但是实例存在,即this.a存在,可打印出来 。
          console.log("建立");
        },
        beforeCompile: function () {
          console.log("未开始编译");
        },
        compiled: function () { 
          //在编译结束后调用。此时所有的指令已生效,因而数据的变化将触发 DOM 更新。但是不担保 $el 已插入文档。
          console.log("编译完成");
        },
        ready: function () { 
          //在编译结束和 $el 第一次插入文档之后调用,如在第一次 attached 钩子之后调用。注意必须是由 Vue 插入(如 vm.$appendTo() 等方法或指令更新)才触发 ready 钩子。
          console.log("一切准备好了");
        },
        attached :function () { //myVue.$appendTo(".test2")暂时触发不了,不知道怎么解决
          //在 vm.$el 插入 DOM 时调用。必须是由指令或实例方法(如 $appendTo())插入,直接操作 vm.$el 不会 触发这个钩子。
          console.log("插入DOM成功");
        },
        detached :function () { //触发事件 myVue.$destroy(true),其中参数true控制是否删除DOM节点或者myVue.$remove()
          //在 vm.$el 从 DOM 中删除时调用。必须是由指令或实例方法删除,直接操作 vm.$el 不会 触发这个钩子。
          console.log("删除DOM成功");
        },
        beforeDestroy: function () { //触发方式,在console里面打myVue.$destroy();
          //在开始销毁实例时调用。此时实例仍然有功能。
          console.log("销毁前");
        },
        destroyed: function () {  //触发方式,在console里面打myVue.$destroy();其中myVue.$destroy(true)是删除DOM节点,会触发detached函数,但是实例仍然存在
          //在实例被销毁之后调用。此时所有的绑定和实例的指令已经解绑,注意是解绑不是销毁,所有的子实例也已经被销毁。
          console.log("已销毁");
        }
    });
    </script>
  </body>
</html>

一、react生命周期

React 生命周期分为三种状态 1. 初始化 2.更新 3.销毁

vue生命周期和react生命周期对比【推荐】

•初始化

1、getDefaultProps()

设置默认的props,也可以用ufaultProps设置组件的默认属性.

2、getInitialState()

在使用es6的class语法时是没有这个钩子函数的,可以直接在constructor中定义this.state。此时可以访问this.props

3、componentWillMount()

组件初始化时只调用,以后组件更新不调用,整个生命周期只调用一次,此时可以修改state。

4、 render()

react最重要的步骤,创建虚拟dom,进行diff算法,更新dom树都在此进行。此时就不能更改state了。

5、componentDidMount()

组件渲染之后调用,只调用一次。

•更新

6、componentWillReceiveProps(nextProps)

组件初始化时不调用,组件接受新的props时调用。

7、shouldComponentUpdate(nextProps, nextState)

react性能优化非常重要的一环。组件接受新的state或者props时调用,我们可以设置在此对比前后两个props和state是否相同,如果相同则返回false阻止更新,因为相同的属性状态一定会生成相同的dom树,这样就不需要创造新的dom树和旧的dom树进行diff算法对比,节省大量性能,尤其是在dom结构复杂的时候

8、componentWillUpdata(nextProps, nextState)

组件初始化时不调用,只有在组件将要更新时才调用,此时可以修改state

9、render()

组件渲染

10、componentDidUpdate()

组件初始化时不调用,组件更新完成后调用,此时可以获取dom节点。

•卸载

11、componentWillUnmount()

组件将要卸载时调用,一些事件监听和定时器需要在此时清除。

总结

以上所述是小编给大家介绍的vue生命周期和react生命周期对比,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
禁止拷贝网页内容的js代码
Jan 22 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
Aug 18 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
Node+Express+MongoDB实现登录注册功能实例
Apr 23 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
JavaScript this绑定过程深入详解
Dec 07 Javascript
VueJS 取得 URL 参数值的方法
Jul 19 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
如何在Node和浏览器控制台中打印彩色文字
Jan 09 Javascript
Vue瀑布流插件的使用示例
Sep 19 #Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 #Javascript
解决vuecli3.0热更新失效的问题
Sep 19 #Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 #Javascript
解决vue热替换失效的根本原因
Sep 19 #Javascript
三种Webpack打包方式(小结)
Sep 19 #Javascript
Vue.js更改调试地址端口号的实例
Sep 19 #Javascript
You might like
PHP禁止个别IP访问网站
2013/10/30 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
PHP入门教程之表单与验证实例详解
2016/09/11 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
thinkphp5.1框架模板布局与模板继承用法分析
2019/07/19 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
PHP中isset、empty的用法与区别示例详解
2020/11/05 PHP
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
Jquery实现简单的轮播效果(代码管用)
2016/03/14 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
2017/02/22 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python下实现二叉堆以及堆排序的示例
2017/09/29 Python
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
python实现验证码识别功能
2018/06/07 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python编写计算器功能
2019/10/25 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
德国家具、照明、家居用品网上商店:Wayfair.de
2020/02/13 全球购物
关于Java finally的面试题
2016/04/27 面试题
2015年库房工作总结
2015/04/30 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server