1.什么是vue生命周期?
vue生命周期是指vue对象从创建到销毁的过程.
vue 生命周期(钩子函数):
①.创建前/后
beforeCreate:实例已经初始化,但el 和 data 并未初始化,不能获取dom节点.
Created:实例已经创建完成,完成了data 数据的初始化,el没有.
②.挂载前/后
beforeMount:模板已经编译完成,完成了el和data 初始化,注意此时还没有挂在html到页面上。
Mounted:挂在完成,模板中的数据已经渲染到页面.
③.更新前后
beforeUpdate:在数据更新之前被调用,data中的数据是新的,页面数据依然是旧的.
Updated:页面数据此时已更新完成.
④.销毁前后
beforeDestroy:实例销毁之前调用,实例仍然完全可用.
Destroyed:vue实例已经销毁完成.
2.第一次页面加载会触发那几个钩子函数?
beforeCreate, Created, beforeMount, Mounted
3.vue的优点?
轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十kb;
简单易学:国人开发,中文文档,不存在语言障碍 ,易于理解和学习;
双向数据绑定:保留了angular的特点,在数据操作方面更为简单;
虚拟DOM:dom操作是非常耗费性能的, 不再使用原生的dom操作节点,极大解放dom操作,但具体操作的还是dom不过是换了另一种方式;
运行速度更快:相比较与react而言,同样是操作虚拟dom,就性能而言,vue存在很大的优势。
4.vuex的理解
①vuex是专门为vue提供的一个状态管理系统.
②vuex有五大核心:
State:用来存放初始数据,不可以直接修改里面的数据.
Getter:类似vue的计算属性,主要用来过滤一些数据.
Mutation :存放的是动态修改Vuex的state中数据状态的方法。
Action:保存的触发mutations中方法的方法,可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。
Module:模块化Vuex
state里面一般存放的数据 1、组件之间全局共享的数据 2、通过后端异步请求的数据
5.vue的两大核心是什么?
数据驱动、组件系统
数据驱动:ViewModel,保证数据和视图的一致性。
组件系统:应用类UI可以看作全部是由组件树构成的。
6.vue双向数据绑定原理?
采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty()
来劫持各个属性的setter
,getter
,在数据变动时发布消息给订阅者,触发相应监听回调.
7.Vue的v-model双向绑定原理?
v-model本质就是一个语法糖,可以看成是value + input方法的语法糖。 可以通过model属性的prop和event属性来进行自定义.原生的v-model,会根据标签的不同生成不同的事件和属性.
8.data为什么是个函数?
组建中的data写成一个函数,这样每次复用组件的时候,都会返回一份新的data,相当于每个组件实例都有自己私有的数据空间,它们只负责各自维护的数据,不会造成混乱。而单纯的写成对象形式,就是所有的组件实例共用了一个data,这样改一个全都改了.
9.为什么要使用key?
需要使用key来给每个节点做一个唯一标识,Diff算法就可以快速正确的识别此节点.
作用主要是为了高效的更新虚拟DOM.
10.v-if和v-show区别?
共同点:都能控制元素属性显示与隐藏
区别:v-if 是通过动态的向DOM树内添加或者删除DOM元素,v-if不停的销毁和创建比较消耗性能。
v-show就是通过控制css中的display设置为none,控制隐藏。
注意:如果要频繁切换某节点,使用v-show(切换开销比较小,初始开销较大)。
如果不需要频繁切换某节点使用v-if(初始渲染开销较小,切换开销比较大)。
11.keep-alive的作用?
keep-alive用于组件缓存,当组件切换是,用来保留当前组件状态,避免重新渲染.
扩展:
keep-alive两个属性 :
include 只有匹配的组件会被缓存.
exclude 任何匹配的组件都不会被缓存.
12.什么是原型,原型链?
原型:每个引用数据类型都有一个原型_proto_。
原型链:当在查找某一属性时,都会先从对象本身查找,如果没有就回去它的原型进行查找,原型如果没有,会从原型的原型查找,直到找到,或者找到原型的顶端null。由此形成原型链。而原型就是原型对象上的属性。