Vue学习整理(一)

1.Vue2.0和Vue3.0的区别?

Vue3.0的发布与Vue2.0相比,优势主要体现在:更快、更小、更易维护、更易于原生,让开发者更轻松;

①重构响应式系统,使用proxy替换Object.defineProperty Proxy优势:
可直接监听数组类型的数据变化;
监听的目标为对象本身,不需要像Object.defineProperty一样遍历每个属性,有一定的性能提升;
可拦截apply、ownKeys、has等13种方法,而Object.defineProperty不行;
直接实现对象属性的新增/删除。
②新增Composition API,更好的逻辑复用和代码组织
③重构Virtual DOM
.模板编译时的优化,将一些静态节点编译成常量
.slot优化,将slot编译为lazy函数,将slot的渲染的决定权将给子组件
.模板中内联事件的提取并重用(原本每次渲染都重新生成内联函数)
.代码结构调整,更便于Tree shaking,使得体积更小
.使用Typescript替换Flow。
④项目目录结构
vue-cli3.0 移除了配置文件目录,config和build文件夹、移除了static静态文件夹,新增了public文件夹,index.html移到了public中。

2.什么是Virtual DOM

什么是Virtual DOM?
所谓的Virtual dom,也就是虚拟节点。它通过JS的Object对象模拟DOM中的节点,然后再通过特定的render方法将其渲染成真实的DOM节点。
虚拟DOM最大的优势在于抽象了原本的渲染过程,实现了跨平台的能力,而不仅仅局限于浏览器的DOM,可以是安卓和IOS的原生组件,可以是最近很火的小程序,也可以是各种GUI。
那么,虚拟DOM到底是什么,说简单点,就是一个普通的JavaScript对象,包含了tag、props、children三个属性。
虚拟DOM 和 真实DOM
因为DOM是树状结构,所以使用JavaScript对象就能很简单的表示。而原生DOM因为浏览器厂商需要实现重多的规范(各种HTML5属性、DOM事件),即使创建一个空的div也要付出昂贵的代价。虚拟DOOM提升性能的点在于DOM发生变化的时候,通过diff算法比对JavaScript原生对象,计算出需要变更的DOM,然后只对变化的DOM进行操作,而不是更新整个视图。
diff算法
diff算法,就是比对新老VDOM的变化,然后将变化的部分更新到视图上。对应到代码上,就是一个diff函数,返回一个patches(补丁)。
修改我们之前的组件,增加了setState方法,用于修改组件的内部状态。当我们调用setSate时,state内部状态发生变动,再次调用render方法就会生成一个新的虚拟DOM树,这样我们就能使用diff方法计算出新老虚拟DOM发送变化的部分,最后使用patch方法,将变动渲染到视图中。

3.Vue实现双向绑定原理

vue实现双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方法,通过Object.defineProperty()来劫持各个属性的setter、getter、在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通javascript对象传给Vue实例来作为它的data选项时,Vue将遍历它的属性,用Object.defineProperty将它们转为getter/setter。用户看不到getter/setter,但是在内部它们让Vue追踪依赖,在属性被访问和修改时通知变化。
vue的数据双向绑定,将MVVM作为数据绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听自己的model的数据变化,通过Compile来解析编译模板指令(vue中是用来解析{{}}),最终利用watcher搭起observer和Compile之间的通信桥梁,达到数据变化——>视图更新;视图交互变化(input)——> 数据model变更双向绑定效果。

4.Vue组件间的参数传递

1.父组件与子组件传值
父组件传给子组件:子组件通过props方法接受数据;
子组件传给父组件:$emit方法传递参数;
2.非父子组件间的数据传递,兄弟组件传值
eventBus,就是创建一个事件中心,相当于中转站,可以用它来传递事件和就收事件。项目比较小时,用这个比较合适。(当然也有不少人推荐直接用VUEX).

5.Vue路由的实现:hash模式和history模式

hash模式:在浏览器中符合“#”,#以及#后面的字符称之为hash,用window.location.hash读取;
特点:hash虽然在URL中,但不被包括在HTTP请求中;用来指导浏览器动作,对服务端安全无用,hash不会重加载页面。hash模式下,仅hash符号之前的内容被包含在请求中,如http://www.xxx.com,因此对于后端来说,即使没有做到对路由的全覆盖,也不会返回404错误。
history模式:history采用HTML5的新特性;且提供了两个新方法:pushStat(),replaceState()可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更。
history模式下,前端的URL必须和实际向后端发送请求的URL一致,如http://www.xxx.com/items/id .。后端如果缺少对 /items/id 的路由处理,将返回 404 错误。Vue-Router 官网里如此描述:“不过这种模式要玩好,还需要后台配置支持……所以呢,你要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。

6.Vue路由的钩子函数

路由的钩子函数总结有6个
全局的路由钩子函数:beforEach,afterEach
单个的路由钩子函数:beforeEnter
组件内的路由钩子函数:beforeRouteEnter,beforeRouteLeave,beforRouteUpdate
首页可以控制导航跳转,beforeEach,afterEach等,一般用于页面title的修改。一些需要登录才能调整页面的重定向功能。
beforeEach主要有3给参数to,from,next:
to: router即将进入的目标路由对象;
from: route当前导航正要离开的路由
next: function一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制网页的跳转。

7.Vue的生命周期

beforeCreate(创建前):在数据观测和初始化事件还未开始
created(创建后):完成数据观测,属性和方法的运算,初始化事件, e l 属 性 还 没 有 显 示 出 来 ; b e f o r e M o u n t ( 载 入 前 ) : 在 挂 载 开 始 之 前 被 调 用 , 相 关 的 r e n d e r 函 数 首 次 被 调 用 。 实 例 已 完 成 以 下 的 配 置 : 编 译 模 板 , 把 d a t a 里 面 的 数 据 和 模 板 生 成 h t m l 。 注 意 此 时 还 没 有 挂 载 h t m l 到 页 面 上 。 m o u n t e d ( 载 入 后 ) : 在 e l 被 新 创 建 的 v m . el属性还没有显示出来; beforeMount(载入前):在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。 mounted(载入后):在el 被新创建的 vm. elbeforeMountrenderdatahtmlhtmlmountedelvm.el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染到html页面中。此过程中进行ajax交互。
beforeUpdate(更新前): 在数据更新之前调用,发生在虚拟DOM重新渲染和打补丁之前。可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated(更新后):在由于数据更改导致的虚拟DOM重新渲染和打补丁之后调用。调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作。然而在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
beforeDestroy(销毁前): 在实例销毁之前调用。实例仍然完全可用。
destroyed(销毁后):在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。
什么是vue生命周期?
Vue实例从创建到销毁的过程,就是生命周期。从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、销毁等一系列过程,称之为 Vue 的生命周期。
Vue声明周期的作用是什么?
它的生命周期中有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。
Vue生命周期总共有几个阶段?
它可以总共分为8个阶段:创建前/后, 载入前/后,更新前/后,销毁前/销毁后。
.第一次页面加载会触发哪几个钩子?
会触发 下面这几个beforeCreate, created, beforeMount, mounted 。
DOM 渲染在 哪个周期中就已经完成?
DOM 渲染在 mounted 中就已经完成了。

8.Vue 中key有什么作用?

当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM
元素来匹配数据项的顺序,
而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM。

9.Vue路由跳转有哪几种?

1.router-link
不带参数
< router-link :to="{name:‘home’}">
//name,path都行, 建议用name
// 注意:router-link中链接如果是’/‘开始就是从根路由开始,如果开始不带’/’,则从当前路由开始。
带参数
< router-link :to="{name:‘home’, params: {id:1}}">
**2.this. r o u t e r . p u s h ( ) ( 函 数 里 面 调 用 ) ∗ ∗ 不 带 参 数 t h i s . router.push() (函数里面调用)** 不带参数 this. router.push()()this.router.push(’/home’)
this. r o u t e r . p u s h ( n a m e : ′ h o m e ′ ) t h i s . router.push({name:'home'}) this. router.push(name:home)this.router.push({path:’/home’})
query传参
this. r o u t e r . p u s h ( n a m e : ′ h o m e ′ , q u e r y : i d : ′ 1 ′ ) t h i s . router.push({name:'home',query: {id:'1'}}) this. router.push(name:home,query:id:1)this.router.push({path:’/home’,query: {id:‘1’}})

10.原型和原型链

1、每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包含特定类型的所有实例共享的属性和方法,即这个原型对象是用来给实例共享属性和方法的。
而每个实例内部都有一个指向原型对象的指针。

2、每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含指向原型对象内部的指针。我们让原型对象的实例(1)等于另一个原型对象(2),
此时原型对象(2)将包含一个指向原型对象(1)的指针,
再让原型对象(2)的实例等于原型对象(3),如此层层递进就构成了实例和原型的链条,这就是原型链的概念

学无止境,持续更新中…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 是一种现代化的 JavaScript 框架,用于构建用户界面和单页应用程序。它是一个轻量级的框架,易于学习和使用,同时也非常灵活和强大。下面是一些Vue.js入门介绍文档的整理。 1. Vue.js 官方文档:Vue.js 官方文档是最全面和权威的 Vue.js 文档。它提供了对 Vue.js 基础、组件、路由、状态管理等方面的详细介绍和示例,适合初学者和有经验的开发人员。 2. Vue.js 教程:这是一个逐步介绍 Vue.js 的教程,从 Vue.js 的基础概念和语法开始,到组件、状态管理和路由等方面的实践示例。适合初学者和有经验的开发人员。 3. Vue.js 入门教程:这是一个简单的 Vue.js 入门教程,重点介绍了 Vue.js 的基础概念和语法,以及组件和指令等方面的实践示例。适合初学者。 4. Vue.js 实战教程:这是一个基于实际项目开发的 Vue.js 实战教程,通过构建一个完整的 Web 应用程序,介绍了 Vue.js 的组件、状态管理、路由、API 请求等方面的实践示例。适合有经验的开发人员。 5. Vue.js 视频教程:这是一些在线视频教程,可以通过观看视频学习 Vue.js 的基础概念和语法、组件和指令等方面的实践示例。适合初学者和有经验的开发人员。 6. Vue.js 实战项目:这是一个基于 Vue.js 的实战项目,包括一个完整的 Web 应用程序和一个移动应用程序,通过实际开发项目来学习 Vue.js 的组件、状态管理、路由、API 请求等方面的实践示例。适合有经验的开发人员。 总之,无论你是初学者还是有经验的开发人员,上述文档和教程都能够帮助你快速入门 Vue.js,并掌握它的基础概念和语法、组件和指令等方面的实践技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值