前端面试题——vue篇

问题难度1

vue 中 v-if 和 v-show 的区别是什么

v-show 总是会进行编译和渲染的工作 - 它只是简单的在元素上添加了 display: none; 的样式。v-show 具有较高的初始化性能成本上的消耗,但是使得转换状态变得很容易。 相比之下,v-if 才是真正「有条件」的:它的加载是惰性的,因此,若它的初始条件是 false,它就不会做任何事情。这对于初始加载时间来说是有益的,当条件为 true 时,v-if 才会编译并渲染其内容。切换 v-if 下的块儿内容实际上时销毁了其内部的所有元素,比如说处于 v-if 下的组件实际上在切换状态时会被销毁并重新生成,因此,切换一个较大 v-if 块儿时会比 v-show 消耗的性能多。
总结:

  • v-show总是会编译和渲染,通过display:none样式来实现,耗能低,转换状态容易
  • v-if 加载惰性,初始值flase,无任何渲染和编译。true时才会渲染和编译,切换时销毁内部所有元素,耗能大。

vue中组件怎么通信

  • 父传子:子组件通过props[‘xx’] 来接收父组件传递的属性 xx 的值
  • 子传父:子组件通过 this.$emit(‘fnName’,value) 来传递,父组件通过接收 fnName 事件方法来接收回调
  • 其他方式:通过创建一个bus,进行传值
  • 使用Vuex

说出几种vue当中的指令和它的用法

  • v-model 双向绑定
  • v-on 绑定函数/事件
  • v-html 解析HTML标签
  • v-text 解析文本
  • v-once 只执行一次渲染
  • v-if 显示和隐藏
  • v-show 显示内容
  • v-bind 动态绑定
  • v-for 循环数组
  • v-bind:class 三种绑定方法
    • 对象型 ‘{red:isred}’
    • 三元型 ‘isred?“red”:“blue”’
    • 数组型‘[{red:“isred”},{blue:“isblue”}]’

vue更新数组时触发视图更新的方法

  • push();
  • pop();
  • shift();
  • unshift();
  • splice();
  • sort();
  • reverse()

vue获取数据在一般在哪个周期函数

  • created
  • beforeMount
  • mounted

vue 常用的修饰符?

  • 事件修饰符

    • .stop 阻止事件继续传播 .prevent 阻止标签默认行为 .
    • capture使用事件捕获模式,即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 .
    • self 只当在 event.target是当前元素自身时触发处理函数
    • once 事件只会触发一次
    • passive 告诉浏览器你不想阻止事件的默认行为
  • v-model 的修饰符

    • .lazy 通过这个修饰符,转变为在 change 事件再同步
    • .number 自动将用户输入值转化为数值类型
    • .trim自动过滤用户输入的收尾空格

问题难度2

vue3.0 中为什么要使用 Proxy,它相比以前的实现方式有什么改进

  • 可以提高实例初始化启动速度,优化数据响应式系统,由全部监听改为惰性监听(lazy by default)。
  • 数据响应式系统全语言特性支持,添加数组索引修改监听,对象的属性增加和删除。

如何获取dom

  • 给dom元素加ref=‘refname’,然后通过this.$refs.refname进行获取dom元素

vue在双向数据绑定是如何实现的?

  • vue双向数据绑定是通过数据劫持、组合、发布订阅模式的方式来实现的,也就是说数据和视图同步,数据发生变化,视图跟着变化,视图变化,数据也随之发生改变
  • 核心:关于vue双向数据绑定,其核心是Object.defineProperty()方法

分别简述computed和watch的使用场景

  • 用官网的一句话来说,所有需要用到计算的都应该使用计算属性。多条数据影响一条数据时使用计算属性,使用场景购物车。
  • 如果是一条数据更改,影响多条数据时,使用watch,使用场景搜索框。

created和mounted的区别

  • created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。
  • mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。

vuex有哪几种属性?

  • state: 基本数据(数据源存放地)
  • getters: 从基本数据派生出来的数据
  • mutations : 提交更改数据的方法,同步!
  • actions : 像一个装饰器,包裹mutations,使之可以异步。
  • modules : 模块化Vuex

vue路由跳转

  • (一)声明式导航router-link
<router-link :to="{name:'home', params: {id:1}}">
<router-link :to="{name:'home', query: {id:1}}">  
<router-link :to="/home/:id">  
//传递对象
<router-link :to="{name:'detail', query: {item:JSON.stringify(obj)}}"></router-link> 
  • (二)this.$router.push()

query传参

1.路由配置:
name: 'home',
path: '/home'
2.跳转:
this.$router.push({name:'home',query: {id:'1'}})
this.$router.push({path:'/home',query: {id:'1'}})
3.获取参数
html取参: $route.query.id
script取参: this.$route.query.id

params传参

1.路由配置:
name: 'home',
path: '/home/:id'(或者path: '/home:id')
2.跳转:
this.$router.push({name:'home',params: {id:'1'}})
注意:
// 只能用 name匹配路由不能用path
// params传参数(类似post)  路由配置 path: "/home/:id" 或者 path: "/home:id"否则刷新参数消失
3.获取参数
html取参:$route.params.id 
script取参:this.$route.params.id

Vue.js 双向绑定的原理

  • Vue.js 2.0 采用数据劫持(Proxy 模式)结合发布者-订阅者模式(PubSub 模式)的方式,通过Object.defineProperty()来劫持各个属性的 setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
  • Vue.js 3.0, 放弃了Object.defineProperty ,使用更快的ES6原生 Proxy (访问对象拦截器, 也称代理器

问题难度3

讲讲对vue 中 computed 的理解

vue 在创建 computed 属性时候,会循环所有计算属性,每一个计算属性会创建一个 watch,并且在通过 defineProperty 定义监听,在 get 中,计算属性工作是做依赖收集,在 set 中,计算属性重要工作是重新执行计算方法,因为 computed 是懒执行,也就是说第一次初始化之后,变不会执行计算,下一次变更执行重新计算是在 set 中。

Computed和Watch的区别

  • computed 计算属性 : 依赖其它属性值,并且 computed 的值有缓存,只有它依赖的 属性值发生改变,下一次获取 computed 的值时才会重新计算 computed 的值。
  • watch 侦听器 : 更多的是观察的作用,无缓存性,类似于某些数据的监听回调,每 当监听的数据变化时都会执行回调进行后续操作。
  • 运用场景:
    • 当我们需要进行数值计算,并且依赖于其它数据时,应该使用 computed,因为可以利用 computed的缓存特性,避免每次获取值时,都要重新计算。
    • 当我们需要在数据变化时执行异步或开销较大的操作时,应该使用 watch,使用 watch 选项允许我们执行异步操作 ( 访问一个 API ),限制我们执行该操作的频率, 并在我们得到最终结果前,设置中间状态。
    • 多个因素影响一个显示,用Computed;一个因素的变化影响多个其他因素、显示,用Watch;

axios是什么?

  • 易用、简洁且高效的http库, 支持node端和浏览器端,支持Promise,支持拦截器等高级配置。

r o u t e 和 route和 routerouter的区别

  • $route是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。
  • $router是“路由实例”对象包括了路由的跳转方法,钩子函数等

Vuex 页面刷新数据丢失怎么解决?

  • 需要做 vuex 数据持久化,一般使用本地储存的方案来保存数据,可以自己设计存储方案,也可以使用第三方插件。
  • 推荐使用 vuex-persist (脯肉赛斯特)插件,它是为 Vuex 持久化储存而生的一个插件。不需要你手动存取 storage,而是直接将状态保存至 cookie 或者 localStorage中。

问题难度4

vue-loader 的实现原理是什么
vue文件的一个加载器,将template/js/style转换为js模块

用途:js可以写es6、style样式

作用:解析和转换 .vue 文件,提取出其中的逻辑代码 script、样式代码 style、以及 HTML 模版 template,再分别把它们交给对应的 Loader 去处理。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值