vue/react生命周期+vuex+vue的优缺点+父子组件生命周期执行顺序+vue虚拟dom

vue生命周期四大阶段:
1.初始化阶段:
beforeCreate:实例刚创建完成,此时还没有data和methods属性
created:vue实例data和method属性已经初始化完成,此时还没有编译模板

2.实例挂载阶段
beforeMount:挂载前,模板编译完成,此时el还没有挂载(DOM节点未创建)
mounted:挂载完成后,el挂载完成,$el属性可用 (在组件被挂载之后调用)

(el为实例提供挂载元素,值可以是 CSS 选择符,或实际 HTML 元素,或返回 HTML 元素的函数。注意元素只用作挂载点。元素可以用 vm.$el 访问)

3.数据更新阶段
beforeUpdate: data数据已经更新,但UI界面还是旧的
updated:已经完成界面的更新渲染(用render函数构建DOM),界面和data里的数据此时都是最新的。

4.销毁阶段
销毁前: beforeDestroy: 实例准备销毁,此时data和methods方法都能用
销毁后:destroyed: 实例销毁完成,此时原先创建的实例方法和属性都不可以用

注:只是生命周期钩子函数而已,是vue实例到相应阶段才会触发该实例相应的钩子函数,并不是在该钩子函数里挂载什么更新什么

1.初始化阶段:
beforeCreate:实例刚创建完成
created:vue实例的data和method属性已经初始化
2.实例挂载阶段
beforeMount: 挂载前,el还没有挂载
mounted:el挂载完成
3.数据更新阶段
beforeUpdate:data数据已经更新,但UI界面还是旧的
updated:已经完成界面和数据的更新渲染
4.销毁阶段
beforeDestroy:销毁前,但实例方法还能用
destroyed:实例销毁完成后,原先创建的实例方法和属性都不可以用

父子组件生命周期执行顺序:
加载渲染过程

父beforeCreate->父created->父beforeMount->子beforeCreate->子created->子beforeMount->子mounted->父mounted

更新过程

父beforeUpdate->子beforeUpdate->子updated->父updated

销毁过程

父beforeDestroy->子beforeDestroy->子destroyed->父destroyed

Vuex理解:
Vuex是状态管理工具,可以解决多组件的数据通信,需要共享的数据适合存在vuex里,如个人信息等,vuex分为五大块
state: 统一定义公共数据
mutations : 使用它来修改数据
getters: Vuex 中的计算属性,当 Store 数据源发生变化时,Getter 的返回值会自动更新
actions: 处理 Vuex 中的异步操作,Action和Mutation相似,Mutation 不能进行异步操作,若要进行异步操作,就得使用Action
modules: 模块拆分,把复杂的场景按模块来拆开

VUE的特点:
1、组件化,实现了封装和重用,且组件间可以相互嵌套;
2、虚拟 DOM。虚拟 dom 中存在 diff算法,提高运行效率
3、Vue是一个MVVM框架,数据是响应式的。
4、单页面应用(SPA)。用户体验好,内容改变时不需要重新加载整个页面,服务器压力小等
5.渐进式、轻量级。相对于其他框架,简单易上手

VUE的缺点
单页面不利于 seo 优化,不支持 IE8 以下,首屏加载时间长。

React生命周期参考这篇文章

react该如何学习:
1.深入掌握ES6,js基础
2.先学会用react写简单的页面,基础语法(怎么使用)
3.了解babel,理解jsx转化为界面的过程
4.掌握react生命周期,状态修改,性能优化等api
5.掌握react高阶组件,相关库,比如react-redux等

进阶:
6.学习数据结构,掌握react架构模式和diff算法
7.和vue等其他框架横向对比,总结
8.掌握babel, webpack,配套实现react自定义脚手架
9.学习node.js,掌握ssr,因为react方便用于服务端渲染

真实dom根据虚拟dom创建:
在一个组件实例第一次被渲染的时候,它会先生成虚拟dom树,然后根据虚拟dom树创建真实dom,所以说,第一次vue渲染效率是不高的,因为还要创建虚拟dom,但是后续就不一样了。

如果一个组件受到响应式数据变化的影响,需要重新渲染时,它仍然会重新调用render函数,创建一个新的虚拟dom树,这时会用新虚拟dom树(newVnode)和旧虚拟dom树(oldVnode)进行对比,通过比对,vue会找到最小更新量,然后更新必要的虚拟dom节点,比对过程用diff算法。最后,这些更新过的虚拟节点会去修改它们对应的真实dom。这样一来就保证了对真实dom的操作达到了最小的改动。

虚拟DOM 的工作过程:
1:首先根据数据创建虚拟dom,它反映真实DOM的结构,然后由虚拟dom创建真实的dom树,真实dom树生成之后,在渲染到页面上。
2:如果数据发生改变,创建新的虚拟dom树,通过Diff算法的patch函数比较两个虚拟dom树的区别,再调整虚拟dom的内部状态
3:在虚拟dom收集到足够的改变时,再一次性应用到真实dom上,渲染到页面。

Vue的渲染流程:
模板(template)编译------->AST----------->渲染函数(h函数)------------->vnode-------------->真实的DOM

生命周期的流程:
四个阶段:
初始化----------------->挂载--------------------->更新--------------------------->销毁

AST详解:
在开发Vue的时候编译器会将模板语法编译成正常的HTML语法,而直接编译的时候是非常困难的,因此此时会借助AST抽象语法树进行周转,进而变为正常的HTML语法,使编译工作变得更加简单。
在这里插入图片描述
抽象语法树的本质上是一个JS对象,Vue在审视所有HTML结构时是以字符串的形式进行的,最终将其解析为JS对象。AST抽象语法树服务于模板编译,将一种语法翻译为另一种语法。在Vue中将模板语法编译为HTML语法,自己作为中转站。
在这里插入图片描述

抽象语法树与虚拟DOM节点的关系:
在这里插入图片描述
总结:
抽象语法树的终点是渲染函数(h函数)。
h() 函数是一个用于创建 vnode的一个函数
渲染函数(h函数),它既是AST的产物,也是vnode(虚拟节点)的起源。h函数里面是不含指令的。
抽象语法树不会进行diff算法的,并且抽象语法树不会直接生成虚拟节点,抽象语法树最终生成的是渲染函数

vue的异步渲染:(因为虚拟DOM 的工作过程)
vue是组件级更新,当数据更改一次组件就要重新渲染一次,性能不高,为了防止数据一更新就更新组件,所以做了个异步更新渲染。(核心的方法就是nextTick)
分析:
当数据变化后会调用notify方法,将watcher遍历,调用update方法(不是生命周期钩子函数)通知watcher进行更新,这时候watcher并不会立即去执行,在update中会调用queueWatcher方法将watcher放到了一个队列里,在queueWatcher会根据watcher的进行去重,多个属性依赖一个watcher,如果队列中没有该watcher就会将该watcher添加到队列中,然后通过nextTick异步执行flushSchedulerQueue方法,flushSchedulerQueue方法开始会触发beforeUpdate方法(生命周期钩子函数),然后watcher.run() 才开始真正执行页面渲染,执行页面渲染后会触发updated方法(生命周期钩子函数)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VueReact是两个常用的前端框架,它们都有自己的生命周期函数用于管理组件的创建、更新和销毁过程。 Vue生命周期函数包括初始化、创建、挂载、更新和销毁等几个阶段。具体来说,Vue生命周期函数按照顺序包括: 1. beforeCreate:在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前调用。 2. created:在实例创建完成后调用,此时实例已经完成了数据观测 (data observer),属性和方法的运算,watch/event 事件回调。但是还未开始DOM编译。 3. beforeMount:在挂载开始之前被调用,此时尚未生成真实的DOM节点。 4. mounted:在挂载完成后被调用,此时组件已经生成了对应的真实DOM节点,可以对DOM进行操作。 5. beforeUpdate:在数据更新之前被调用,可以在这个钩子里进行更新前的操作。 6. updated:在数据更新完成后被调用,可以在这个钩子里进行更新后的操作。 7. beforeDestroy:在实例销毁之前调用,可以在这个钩子里进行一些清理工作。 8. destroyed:在实例销毁之后调用,此时实例中的所有指令及事件监听器都已经被移除。 React生命周期函数则有一些不同,主要包括: 1. constructor:在组件被创建时调用,用于初始化状态和绑定事件处理方法。 2. render:用于渲染组件的内容,返回一个React元素。 3. componentDidMount:在组件挂载到DOM后调用,可以进行一些需要DOM操作的初始化工作。 4. componentDidUpdate:在组件更新后被调用,可以进行一些需要DOM操作的更新工作。 5. componentWillUnmount:在组件即将从DOM中移除时调用,可以进行一些清理工作。 在新版本的React中,还引入了一些新的生命周期函数,比如getDerivedStateFromProps和getSnapshotBeforeUpdate,用于实现一些额外的功能。 总结一下,VueReact生命周期函数在创建、更新和销毁的过程中有所不同,同时React还引入了一些新的生命周期函数。了解这些生命周期函数的执行顺序和用途可以帮助我们更好地管理和控制组件的行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值