当前位置: 首页 > news >正文

Vue系列面试题

大家好,我是有用就扩散,有用就点赞。

1.Vue中组件间有哪些通信方式?

父子组件通信:

(1)props | $emit (接收父组件数据 | 传数据给父组件)

(2)ref | $refs(给普通的DOM元素或者子组件注册引用信息 | 获取通过ref注册的引用)

(3)$parent | $children(获取当前组件的父组件实例 | 获取当前组件的子组件实例)

多层级组件通信:

(1)provide | $inject(提供子组件要使用的数据 | 子组件获取父组件定义的数据)

(2)$attrs | l i s t e n e r s (获取一个组件没有声明 p r o p 时所包含的数据,搭配 i n h e r i t A t t r s : f a l s e 使用,设置继承 listeners(获取一个组件没有声明prop时所包含的数据,搭配inheritAttrs:false使用,设置继承 listeners(获取一个组件没有声明prop时所包含的数据,搭配inheritAttrs:false使用,设置继承attrs默认行为关闭 | 获取包含父作用域中的事件监听器)

非关系组件通信:

(1)(利用vue注册自定义事件)$emit | $on(发送数据 | 获取数据)

(2)Vuex 数据全局状态管理

  • state单一状态树(mapState获取多个状态,state获取数据)

  • mutation 更改Vuex的store中的状态的唯一方法(commit设置数据)

  • getter接受state作为其第一个参数

  • actions处理异步逻辑

(3)ocalstorage和sessionstorage用作存储数据

2.Vue中v-show和v-if的区别是什么?

v-show:是渲染组件,然后改变组件的display为block或none

v-if:是惰性渲染机制,在属性初始为false时,组件就不会被渲染,直到条件为true,并且切换条件时会触发销毁/挂载组件。

如果需要非常频繁地切换,则使用v-show较好;如果在运行时条件很少改变,则使用v-if较好

3.keep-alive组件有什么作用?

1)keep-alive是vue内置的一个组件,可以使被包含的组件保留状态,避免重新渲染。

2)对于keep-alive组件来说,它拥有两个独有的生命周期钩子函数,分别为activated和deactivated。用keep-alive包裹的组件在切换时不会进行销毁,而是缓存到内存中并执行deactivated钩子函数,命中缓存渲染后会执行actived钩子函数。

3)keep-alive几个重要的属性:

  • include - 只有名称匹配的组件会被缓存
  • exclude - 任何名称匹配的组件不会被缓存
  • max - 最多可以缓存多少组件实例

4.说下Vue生命周期钩子函数?

beforeCreate 组件实例刚被创建,组件属性计算之前

created 组件实例创建完成,属性已绑定,但DOM还未生成,$el属性还不存在

beforeMount 模板编译/挂载之前$el还不存在

mounted 模板编译/挂载之后(不保证组件已在DOM中)

beforeUpdate组件更新之前

updated组件更新之后

beforeDestory 组件销毁前调用

destoryed 组件销毁后调用

Vue3支持多个相同生命周期

setup是围绕beforeCreate和created生命周期钩子运行,在setup()内部调用生命周期钩子

在Vue2生命周期钩子前面加上”on“来访问组件的生命周期钩子

5.Vue中computed和watch区别?

computed是计算属性,依赖其他属性计算值,并且computed的值有缓存,只有当计算值变化才会返回内容。

watch监听到值的变化就会执行回调,在回调中可以进行一些逻辑操作。

6.v-if和v-for为什么不能连用?

1)v-for优先于v-if被解析,从源码中发现,先处理静态节点,在处理once,在处理for,在处理if,代码显示for的优先级比if高,断点调试也证实for优先于if。在vue3中v-if优先于v-for被解析

2)如果同时使用,每次渲染都会先执行循环在判断条件,无论如何循环都避免不了,浪费了性能。

3)要避免出现这种情况,可以采用多层包裹来解决性能损耗问题。例如外层给标签绑定指令v-if或者是内层标签绑定v-if。

7.单页面应用和多页面应用区别及优缺点?

SPA优点:

(1)用户体验好、快,内容的改变不需要重新加载整个页面,基于这一点SPA对服务器压力较小

(2)前后端分离

(3)页面用户体检比较好

SPA缺点:

(1)不利于SEO

(2)导航不可用,需要自己实现导航

(3)初次加载耗时长

(4)页面复杂度提高

MPA优点:

(1)多页面应用对于SEO更加友好

(2)更容易扩展

(3)更易的数据分析

MPA缺点:

(1)程序开发成本高

(2)增加服务端压力,多页面会不停的加载

(3)用户体验相对较差

8.v-model该如何实现?

v-model本质上是v-on和v-bind的语法糖。v-model在内部为不同元素抛出不同的事件,如:

(1)text和textarea元素使用value属性和input事件

(2)checkbox和radio使用checked属性和change事件

(3)select字段将value作为prop并将change作为事件

(4)v-model作用在普通表单上

<input v-model="myvalue" />
//等同于
<input v-bind:value="myvalue"v-on:input="myvalue=$event.target.value"
/>

(5)v-model作用在组件上

//html
<mycom v-model="myvalue"/>
//等同于
<mycom :value="myvalue" @input="(e)=>{myvalue=e}"/>//mycom
<template>
<div><input :value="value" @input="$emit('input',$event.target.value)"/>
</div>
</template>
<script>
export default {props:['value'],
}
</script>

9.mixin和mixis区别?

mixin用于全局混入,会影响到每个组件实例,通常插件都是这样做初始化的。比如:可以全局混入封装好的ajax或者一些工具函数等。

mixins用于单组件,是最常使用的扩展组件的方式。如果多个组件中有相同的业务逻辑,就可以将这些逻辑剥离出来,通过mixins混入代码。比如上拉下拉加载数据这种逻辑等。

mixin的问题?

(1)来源不清晰问题

(2)命名冲突问题

Vue3中不需要mixin,Vue3类似函数式编程,compostion api可以很好解决复用问题

10.Vue2中为什么检测不到数组的变化,如何解决?

由于JavaScript的限制,Vue不能检测数组变动。Vue2中采用Object.defineProperty来实现数据响应式,Object.definePropery虽然可以监听到数组的变化,但是由于在性能和体验的性价比上考虑,Vue2放弃了这个特性。

在Vue2中想实现数组的响应式可以通过全局Vue.set或者实例方法vm.$set来修改,使得数据变得响应式,也可以通过数组的变异方法来实现(push、pop、shift、unshift、splice、sort、reverse)

欢迎各位大哥投稿PR。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WebKit的CSS Aspect Ratio Box:重塑响应式设计
  • Java面试八股之后Spring、spring mvc和spring boot的区别
  • Linux:Linux进程控制
  • 苍穹外卖01
  • Scrapy 爬取旅游景点相关数据(四)
  • 企业公户验证API如何使用JAVA、Python、PHP语言进行应用
  • react中useReducer钩子函数的使用
  • 强制通风(1):汽车发动机为什么需要强制通风,什么是强制通风?
  • day08:订单状态定时处理、来单提醒和客户催单
  • 【机器学习】智驭未来:机器学习如何重塑制造业的转型与升级
  • PHP身份证实名认证接口集成守护电商购物
  • 使用Claude 3.5 Sonnet和Stable Diffusion XL:如何通过Amazon Bedrock不断优化图像生成直到满足需求
  • springboot会员信息管理系统-计算机毕业设计源码38258
  • 昇思25天学习打卡营第17天|计算机视觉
  • Github 2024-07-26开源项目日报 Top10
  • 【译】JS基础算法脚本:字符串结尾
  • @angular/forms 源码解析之双向绑定
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Apache Zeppelin在Apache Trafodion上的可视化
  • avalon2.2的VM生成过程
  • Flex布局到底解决了什么问题
  • JAVA多线程机制解析-volatilesynchronized
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux中的硬链接与软链接
  • MaxCompute访问TableStore(OTS) 数据
  • npx命令介绍
  • python学习笔记 - ThreadLocal
  • win10下安装mysql5.7
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 官方解决所有 npm 全局安装权限问题
  • 欢迎参加第二届中国游戏开发者大会
  • 基于HAProxy的高性能缓存服务器nuster
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #includecmath
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (1)(1.9) MSP (version 4.2)
  • (四) 虚拟摄像头vivi体验
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原创)可支持最大高度的NestedScrollView
  • (原創) 未来三学期想要修的课 (日記)
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .gitignore文件使用
  • .NET C# 使用 iText 生成PDF
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net framework 4.0中如何 输出 form 的name属性。
  • .Net IOC框架入门之一 Unity
  • .NET 常见的偏门问题
  • .Net 访问电子邮箱-LumiSoft.Net,好用