面试题(vue)

1、v-if与v-show的区别

v-if:惰性的,在页面初始化如果条件是false,不会渲染;适用于条件渲染,不适用与频繁的显隐切换

v-show:不管初始化条件是什么,都会渲染元素,css切换,适用于频繁切换

2、路由实现方式

(1)router-link:to

(2)this.$router.push()

(3)this.$router.replace() 直接替换掉当前的路由,此时再使用浏览器的前进后退按钮,不会回到之前的路由链接

(4)this.$router.go(1)

参数:params(post)   query(get)

3、生命周期函数,每个生命周期做了什么

(1)beforeCreate

    vue实例创建之前,读不到data与method。

(2)created

    完成数据观测,属性和方法运算;watch与event事件回调,但是还未挂载,因此$el是读不到的。

    ajax请求异步数据,初始化数据

(3)beforeMount

    挂载之前被调用,render函数开始调用

(4)mounted

    el选项的DOM节点被vm.$el代替,挂载到vue实例上,此时数据被渲染到DOM上。

    可以获取挂载的DOM元素节点

(5)beforeUpdate

    数据更新调用,但不进行重新渲染。

(6)updated

    数据更新并重新 渲染DOM

(7)beforeDestory

    组件销毁之前被调用;(v-if为false;路由跳转;页面关闭;改变key值)

(8)destoryed

4、双向数据绑定实现的原理

     vue是一个MVVM框架, 即model view viewmodel,是一个数据驱动模型;数据改变,视图也会相应的变化。是通过Object.defineProperty来实现数据劫持的。

     每一个属性都有一个get与set方法,这两个方法是在Object.defineProperty中定义的,可以控制对象的属性的特有操作,比如读写,枚举等等。

5、vuex的实现

state mutations actions getters modules 

6、组件之间数据传递方式( 链接:https://blog.csdn.net/qq_39623518/article/details/112918507 )

7、watch与computed的区别

computed:页面初始化即执行,可缓存数据,双向绑定

watch:可异步,不能缓存,值改变才会执行

8、vuex与localStorage的区别及应用

9、vue2与3的区别

10、搭建vue项目的流程

11、$nextTick的原理及应用

12、路由的hash与history的区别,什么场景下应用,实现原理

13、为什么vue检测不到对象及数组元素的数据变化

14、为什么要使用set,原理是什么

        在实例创建之后,添加新的属性到实例上时,视图不会更新,因此使用set方法来更新视图;

        vue在遍历data时,会使用Object.defineProperty为每一个属性添加getter与setter,但是在实例创建之后,再增加的属性并没有生成getter、setter,因此不会被监听;

        可以用Vue.set或者vm.$set两种方式来修改属性。

15、axios如何在全局定义token,每次请求都携带token

16、vue如何做SEO

17、vue的扩展方法

18、keep-alive使用方式及作用,链接(https://blog.csdn.net/qq_39623518/article/details/113182663

19、import与require的区别

      (1)遵循的规范: import是AMD规范;require是es6的语法

      (2)调用的时间:import是编译时调用;require是运行时调用

      (3)本质:import是解构过程,目前引擎不支持import,会被转换为require;require是赋值过程,返回的结果就是对象、数字、字符串等

      (4)写法上:             

require
require fs from 'fs'
export.fs = fs
module.exports = fs

import 
import fs from 'fs'
import {default as fs} from 'fs'
import * as fs from 'fs'
import {readFile} from 'fs'
import {readFile as read} from 'fs'
import fs, {readFile} from 'fs'

export default fs
export const fs
export function readFile
export {readFile, read}
export * from 'fs'

 20、父级组件数据变化,子组件数据更新发生在哪个生命周期

       父组件传递给子组件的数据发生变化,子组件数据的更新会发生在 beforeUpdate 阶段。

21、多次调用子组件的按钮,会渲染几次

       渲染多次

22、v-if与v-for同时使用会出现什么问题,为什么,怎么解决

      v-for的优先级高于v-if,同时使用会重复生成n个v-if,如果只是判断是否要展示列表,可以在循环元素的父级添加v-if

23、for循环中key的作用

      方便diff算法;高效的更新虚拟DOM。

      在数据发生改变,例如插入一条新数据时,diff算法会对原有的节点与新的节点进行比较,相同则复制,不相同则会直接替换,然后发生改变的节点后面的节点就全都会重新渲染一次,非常消耗性能。如果给节点一个id,diff算法就能唯一标识需要修改的节点,不会重新渲染其他节点。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值