找工作第四弹——Vue面经

1.Vue生命周期

1.生命周期的定义:Vue 实例从创建到销毁的过程,就是生命周期。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程,我们称这是 Vue 的生命周期。

2.具体内容:

beforeCreate:

对应的钩子函数为beforeCreate。此阶段el和data都还没有形成。

created:

在这个阶段vue实例已经创建,仍然不能获取DOM元素。

created可以获取到props、data中定义的值。但是el还没有形成。所以也没有渲染DOM。

beforeMount:

但是el和data都已经存在了,只是还未挂载。页面呈现的是未经编译的DOM结构,所有对DOM的操作,都不奏效。

mounted:

mounted是平时我们使用最多的函数了,一般我们的异步请求都写在这里。在这个阶段,数据和DOM都已被渲染出来。

此时,页面中呈现的是Vue编译后的DOM,对DOM的操作有效,但是要避免对DOM的操作。至此初始化结束。我们可以在这个阶段,开启定时器、发送网络请求、订阅消息、绑定自定义事件等。

beforeupdate:

当数据发送改变,页面尚未和数据保持同步。数据新,页面旧。

updated:

数据是新的,页面也是新的,页面和数据保持同步。

beforeDestroy:

销毁前,关闭定时器,取消订阅消息,解绑自定义事件等收尾操作。

destroyed:

销毁了。

销毁后借助Vue开发者工具无法看到任何信息;
自定义事件失效;
一般不会再操作注册,即使操作数据,也不会再触发更新流程。

3.常用生命周期
mounted:发送Ajax请求;启动定时器;绑定自定义事件;订阅消息等;
beforeDestroy:清除定时器;解绑自定义事件;取消订阅消息等;

需要注意的是,如果一个组件中有子组件,则子组件在父组件挂载前挂载;在父组件更新前更新;在父组件销毁前销毁。

4.页面第一次加载
触发beforeCreate、Created、beforeMount、Mounted

5.$nextTick:更新数据后立刻操作DOM。

2.响应式原理

Vue2的响应式原理关键是Object.defineProperty,通过这个方法对data中的属性进行重新定义,给数据的get和set设置一个拦截功能。当setter更新,就会通知对应的依赖,进行视图更新。从而实现响应式。

Vue3的响应式原理使用了Proxy对象代理对象中的每个属性。

3.路由缓存

路由缓存,可以提高为了提高应用的效率。

缓存的方法:keep-alive标签。

在标签内放置router-view可以实现简单的数据缓存。

    <keep-alive>
        <router-view></router-view>
    </keep-alive>

需要注意的是,keep-alive有个include属性,可以用来缓存个别组件的数据。include后面跟的是组件名name,如果是多组件后面跟一个组件名数组。

还需要注意的是路由组件的生命周期函数,有一个activated和一个deactivated。通过这两个生命周期函数,我们可以通过两个key的原理组件的生命周期函数实现:在messages组件出现时激活定时器,在messages组件被切走时销毁定时器。

4.虚拟DOM中key的作用

key是虚拟DOM的对象标识,状态中数据发生变化,Vue会根据新数据生成新的虚拟DOM;随后Vue进行新虚拟DOM与旧虚拟DOM发生比对:

旧虚拟DOM中找到了与新虚拟DOM相同的key,若虚拟DOM中内容没变,直接用真实DOM;如果虚拟DOM内容变了,生成新的虚拟DOM,随后替换掉页面之前的DOM。

什么时候选择key:
最好使用每一条数据的唯一标识作key;不存在破坏顺序的操作,仅用于渲染列表用于展示,可以用index。

5.diff比对算法

理论上讲,vue的响应式,如果数据发生改变,模板会重新被渲染。为了提高应用的性能,在某些情况下DOM不需要全部被渲染。这就离不开diff算法。

现在的情况对应了一个虚拟DOM,一旦数据更新,又会产生一个新的虚拟DOM。通过key作为虚拟DOM的对象标识,两个虚拟DOM进行比对,将它们的节点和节点的节点抽离出来比对,相当于是图的深度优先遍历算法。一一比对,如果旧虚拟DOM缺则添加,旧虚拟DOM多则删除。

完成上述步骤后再之前的基础上渲染,速度更快,性能更优。

6.MVVM与MVC

MVVM,Model-View-ViewModel。模型-视图-视图模型。

M和V通过VM的桥梁关联起来,实现了模型和视图的分离。并且MV之间的沟通用到双向绑定,V->M用的是Dom事件监听;M->V用的是数据的单向绑定。

MVC是单向通信,V->M必须使用controller来实现通信。

两者最大的区别就是,MVVM实现了数据的同步。无需手动改变DOM元素,DOM元素自动同步。

7.为什么选择Vue开发

好上手,文档和教程成熟,学习快;

组件库多,样式丰富,效果好;

脚手架搭建项目,非常方便;

组件可复用性强;性能好;运行快。

8.组件之间的传值

父子组件传值,父组件中利用数据单向绑定,子组件props声明接受;
祖孙组件传值,祖组件中利用provide提供数据,孙组件中利用inject接收数据。

子父组件传值,自定义事件,在父组件中给子组件设置一个自定义事件,子组件利用emit触发自定义事件,并将数据传给父组件;
子向父传值还可以用到ref,在父组件中给子组件设置一个ref,并通过 $refs 给子组件绑定一个自定义事件,在子组件中触发,父组件也可也接收到子组件传来的值。

事件车,$bus,这样的方式可以实现组件的共享,原理是把事件车放在vue的原型上,所有组件都能访问到;
Vuex也可也实现兄弟组件之间的传值。

9.组件的定义

首先在Components文件夹中定义一个vue文件;

在全局或者单个组件中引入,并命名;

以上面的名字作为标签名在组件中进行应用。

10.插件的使用

插件的使用是先通过npm下载插件;

再在main.js中通过Vue.use()进行使用

11.scss的使用

脚手架可以自动安装scss。

安装后给style标签后面标注scss,并使用。less也一样。

12.聊聊Vue骨架屏

骨架屏作用是优化用户弱网体验。用户网络较差的时候点进去展示一个页面的骨架。

方法一,在模板文件中,id为app的地方,写入进去想要的html效果;

可以通过插件自动渲染骨架屏。

13.每个组件的样式不互相影响

加上scoped属性即可。

14.v-if和v-show

他们后面都跟着条件判断语句。

但是它们对元素隐藏与显示的操控原理不一样。v-show对元素的显示隐藏是通过display;v-if是直接让元素销毁或者重建。

15.v-if为什么不可以和v-for一起用

vue2和vue3中这两个优先级不一样,容易混淆。所以用的时候要注意。

16.Vuex的相关复习

1.vuex是什么?
vue中的状态管理,数据共享。

2.vuex中的属性:state、mutation、action、getter

3.属性的作用:
state就是数据源存放地,对应于一般Vue对象里面的data;
getters 可以对State进行计算操作,它就是Store的计算属性;
mutation 内部存放对数据的同步操作,一般用 $store.commit 去调用;
action 内部存放异步操作,异步操作用commit提交到mutation进行操作,一般用 $store.dispatch 调用;

17.路由传参

用于:
动态路由;
name匹配,parme传参;
path匹配,query传参;

query更加类似于ajax中get传参,params则类似于post,说的再简单一点,前者在浏览器地址栏中显示参数,后者则不显示。

18.computed,watch,methods

methods:主要用来写业务逻辑,是一个具体操作。是函数调用;

computed:computed定义的方法我们是以属性访问的形式调用,属性的结果会被缓存,除非依赖的响应式属性变化才会重新计算,主要当作属性来使用;

computed缓存原理:computed里面控制缓存最重要的一点就是脏数据标记为dirty, dirty是watcher的一个属性;

watch 一个对象,键是需要观察的表达式,值是对应回调函数。主要用来监听某些特定数据的变化,从而进行某些具体的业务逻辑操作。不会缓存。我们也可以利用watch进行一些异步操作。

19.nexttick

vue中的nextTick主要用于处理数据动态变化后,DOM还未及时更新的问题,用nextTick就可以获取数据更新后最新DOM的变化。

将回调函数延迟在下一次dom更新数据后调用。

20.Vue.use()

Vue.use用于安装一些插件。通过全局方法 Vue.use() 使用插件,Vue.use 会自动阻止多次注册相同插件

21.常见请求头,响应头

请求头,用来说明服务器要使用的附加信息:

Accept,​​​​​​​请求报头域,用于指定客户端可接受哪些类型的信息;

Accept-language,用于指定客户端可接受的语言类型;

​​​​​​​Host,主机ip和端口号;

​​​​​​​Referer,​​​​​​​此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这 信息并做相应的处理,如做来源统计、防盗链处理等。

响应头,用来说明响应的数据:

Content-Language,响就内容所使用的语言。

Content-Length,响应消息体的长度。

22.h5和app跨端交互

有自己的方法。

23.

猜你喜欢

转载自blog.csdn.net/zxdznyy/article/details/131514751