2021年前端面试题-vue篇
1、多个组件之间如何拆分各自的state,每块小的组件有自己的状态,它们之间还有一些公共的状态需要维护,如何思考这块
(1)公共的数据部分可以提升至和他们最近的父组件,由父组件派发
(2)公共数据可以放到vuex中统一管理,各组件分别获取
2、key主要是解决哪一类的问题,为什么不建议用索引index(重绘)
(1)key的作用主要是为了高效的更新虚拟DOM
(2)当以index为key值时,如果数组长度发生变化,会导致key的变化,比如删除其中某一项,那么index会相应变化。
所以用index作为key和不加index没有什么区别,都不能提升性能。一般用每项数据的唯一值来作为key,就算数组长度变化,也不会影响到这个key
3、介绍虚拟DOM
(1)让我们不用直接操作DOM元素,只操作数据便可以重新渲染页面
(2)虚拟dom
虚拟dom是为了解决浏览器性能问题而被设计出来的
当操作数据时,将改变的dom元素缓存起来,都计算完后再通过比较映射到真实的dom树上
(3)diff算法比较新旧虚拟dom
如果节点类型相同,则比较数据,修改数据
如果节点不同,直接干掉节点及所有子节点,插入新的节点
如果给每个节点都设置了唯一的key,就可以准确的找到需要改变的内容,否则就会出现修改一个地方导致其他地方都改变的情况。
比如A-B-C-D, 我要插入新节点A-B-M-C-D,实际上改变的了C和D。但是设置了key,就可以准确的找到B C并插入
dom树介绍直通车 :https://www.jianshu.com/p/af0b398602bc(个人觉得还不错很容易懂)
4、介绍高阶组件
5、如何解决props层级过深的问题
(1)使用vuex
(2)传递数据,使用以下接收(均不含被props接收的数据)
this.$attrs 接收属性
this.$listeners 接收事件(不含被 .native 修饰符的事件)
6、vue中如何编写可复用的组件
(1)以组件功能命名
(2)只负责ui的展示和交互动画,不要在组件里与服务器打交道(获取异步数据等)
(3)可复用组件不会因组件使用的位置、场景而变化。尽量减少对外部条件的依赖。
7、vue中对象更改检测的注意事项
8、解决非工程化项目初始化页面闪动问题
vue页面在加载的时候闪烁花括号{{}},使用v-cloak,隐藏未编译时候的标签
//css样式
[v-cloak] {
display: none;
}
//html代码
<div v-cloak>
<ul>
<li >{{ text }}</li>
</ul>
</div>
9、十个常用的自定义过滤器
(1)去除空格
(2)时间转换
(3)大小写转换
(4)字符串替换
(5)金额字符转金额/数字转金额字符
(6)保留两位小数
(7)判断字符串长度并省略
...
根据自己常用的来说
10、vue弹窗后如何禁止滚动条滚动?
methods : {
//禁止滚动
stop(){
var mo=function(e){e.preventDefault();};
document.body.style.overflow='hidden';
document.addEventListener("touchmove",mo,false);//禁止页面滑动
},
/***取消滑动限制***/
move(){
var mo=function(e){e.preventDefault();};
document.body.style.overflow='';//出现滚动条
document.removeEventListener("touchmove",mo,false);
}
11、完整的 vue-router 导航解析流程
12、vue-router的几种实例方法以及参数传递
13、vue-router如何定义嵌套路由?

在这种场景下就需要用到嵌套路由
const router = new VueRouter({
routes: [
{ path: '/testPage',
component: testPage,
children: [
{
path: '/sonPageA',
component: sonPageA
},
{
path: '/sonPageB',
component: sonPageB
},
]
},
{
// 其他和testPage平级的路由
}
]
})
14、vue-router如何实现路由懒加载( 动态加载路由 )
15、vue-router路由的两种模式
vue-router中默认使用的是hash模式
(1)hash模式
http://localhost:8080/#/pageA
hash 的值为 #/pageA
改变hash,浏览器本身不会有任何请求服务器动作的,但是页面状态和url已经关联起来了。
(2)history模式
http://localhost:8080/ 正常的而路径,并没有#
16、vuex的核心概念
state => 基本数据
getters => 从基本数据派生的数据
mutations => 修改数据,同步
actions => 修改数据,异步
modules => 模块化Vuex
17、vue如何优化首屏加载速度?
(1)按需加载组件,不一次性加载所有组件
(2)减少打包js,如果打包后的js文件过大,会阻塞加载。如下:
A、在index.html文件中:
<script src="/static/common/js/vue.min.js"></script>
B、在vue.config.js文件中配置:
config.externals({
vue: 'Vue',
})
配置两个步骤,不打包vue
(3)关闭sourcemap,开启压缩代码
vue.config.js文件中配置:productionSourceMap: false,
(4)加个好看的loading效果
18、Vue.js 全局运行机制
19、响应式系统的基本原理
20、怎么注册插件
使用全局方法Vue.use()
Vue.use( MyPlugin ) com.js中
import com from './xx.vue'
let test = {}
test.install = function(Vue,options){
Vue.component(panel.name, panel) // 注册全局组件
}
export default com main.js中
import com from './com.js'
Vue.use(com) 所有vue文件中都可以调用组件<com></com>
21、如何编译template 模板?
compile编译会有三个过程
(1)parse 根据正则进行字符串解析,得到指令、class、style等数据,形成语法树(AST)
(2)对 parse 生成的 AST 进行静态内容的优化,标记静态节点(和数据没有关系不需要每次都刷新的内容),标记静态根节点。
(3)generate 生成 render
生成 render 的 generate 函数的输入也是 AST,它递归了 AST 树,为不同的 AST 节点创建了不同的内部调用方法,等待后面的调用。
compile编译模板好文直通车: https://segmentfault.com/a/1190000012922342
22、diff算法
diff算法比较新旧虚拟dom
如果节点类型相同,则比较数据,修改数据
如果节点不同,直接干掉节点及所有子节点,插入新的节点
如果给每个节点都设置了唯一的key,就可以准确的找到需要改变的内容,否则就会出现修改一个地方导致其他地方都改变的情况。比如A-B-C-D, 我要插入新节点A-B-M-C-D,实际上改变的了C和D。但是设置了key,就可以准确的找到B C并插入
23、批量异步更新策略及 nextTick 原理?
(1)批量异步策略
Vue 在修改数据后,视图不会立刻更新,而是等同一事件循环中的所有数据变化完成之后,再统一进行视图更新。
(2)nextTick
在下一次DOM更新循环结束之后执行延迟回调
24、vue中proxy代理?
25、vue开发命令 npm run dev 输入后的执行过程
(1)npm run dev是执行配置在package.json中的脚本
(2)调用了webpack配置文件
(3)配置文件中调用了main.js
(4)main.js用到了一个html元素#app,引用路由等开始vue的模板编译
26、devDependencies和dependencies的区别
(1)devDependencies
用于本地开发,打包时生产环境不会打包这些依赖
(2)dependencies
开发环境能用,生产环境也能用。生产环境会被打包
27、依赖版本~和^的区别
(1)~
会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
(2)^
会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0
28、插件机制
29、router的meta有什么用
在meta对象中可以设置一些状态,通常设置标题或是否需要缓存。$route.meta.keepAlive/$route.meta.title
{
path:"/test",
name:"test",
component:()=>import("@/components/test"),
meta:{
title:"测试页面", //配置title
keepAlive: true //是否缓存
}
}
30、如果子组件直接修改父组件的值会发生什么?怎么解决,要修改多个数据怎么办?
如果修改的不是引用类型的值时会报错,告诉我们不能直接修改父组件的值。
(1)可以使用.sync修饰符来修改值,对一个 prop 进行“双向绑定”。(注意.sync 修饰符的 v-bind 不能和表达式一起使用)
(2)父组件将改变值的方法传递给子组件
2021年前端面试题-vue篇的更多相关文章
- 2021年前端面试题-HTML篇
1.<img>的title和alt有什么区别? 1.alt:图片加载失败时,显示在网页的替代文字 2.title:鼠标放在上面时显示的文字 3.alt是必要属性,title非必要 2.WE ...
- 2019年前端面试题 | CSS篇 (更新于4月15日)
虽说刷面试题有走捷径之嫌,但我发现,对于我这样没有工作经历的人来说,其实是拓展自己实战技能和加深知识理解的一个好机会. 分享出来,也希望大家不要背完了事,正经的去细细琢磨各种原由. 本篇是一个题目合集 ...
- 前端面试题 -- JS篇
前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数 ...
- 前端面试题---vue部分
1.vue的两大核心思想 组件化和数据驱动 2.如何理解vue中的MVVM模式 Model-View-ViewModel(简称为mvvm)是一种设计思想,model层代表数据模型,也可以再model中 ...
- 前端面试题 vue
webpack 作用:webpack是把项目当作一个整体,通过一个给定的的主文件,webpack将从这个文件开始找到你的项目的所有依赖文件,使用loaders处理它们,最后打包成一个或多个浏览器可识别 ...
- 前端面试题 ---- html篇
想要换工作了,转载自https://www.cnblogs.com/zhangshuda/p/8464772.html,感谢原博主. 一.html 1.html和xhtml区别 1. html:超文本 ...
- 前端面试题 ----css篇
转载自https://www.cnblogs.com/zhangshuda/p/8465043.html,感谢原博主 1.css盒模型有哪些及区别content-box border-box padd ...
- 好程序员分享Web前端面试题汇总JS篇之跨域问题
为什么80%的码农都做不了架构师?>>> 好程序员分享Web前端面试题汇总JS篇之跨域问题,接着上一篇文章我们继续来探讨web前端面试必备面试题. 跨域解决方案 1. 通过jso ...
- 前端面试题(html篇)
前端面试题(html篇)
- 史上最全前端面试题(含答案)-A篇
HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索几率.使用外 链css和js脚本.结构行为表现的分离.文件下载与页面速度更快.内容能被更多的用户所 ...
随机推荐
- 自定义Excel右下角状态栏的显示项
Excel右下角的状态栏是一个非常方便和有用的显示栏,在执行一些简单的计算时可以直接选取需要计算的区域即可得到汇总,计数,平均值等结果. 如果需要调整状态栏的显示选项,则在状态栏处右键点击: 可以选中 ...
- R语言包学习之tidyr包:数据结构重构
↓↓↓欢迎关注我的公众号,在这里有数据相关技术经验的优质原创文章↓↓↓ tidyr包 tidyr包主要涉及的功能和函数有: 1)缺失值的简单补齐 2)长表变宽表与宽表变长表 gather-把宽度较大的 ...
- 【Java并发工具三剑客】CountDownLatch、CyclicBarrier和Semaphore详解
在Java并发编程中,java.util.concurrent包提供了强大的工具类来简化线程间的协调工作.本文将深入探讨三个核心工具:CountDownLatch.CyclicBarrier和Sema ...
- ETL工具怎么实现多流SQL实时运算?
多流SQL实时运算的特点和应用场景 多流SQL实时运算是一种先进的数据处理技术,它在大数据处理领域中扮演着至关重要的角色,尤其是在需要对多个数据流进行实时分析和处理的应用场景中.该技术结合了SQL(结 ...
- "firmwarepasswd": MacOS Firmware Password Management: CHECK and DELETE Macbook Pro Firmware Password from the command line.
Abaels-MacBook-Pro:~ abaelhe$ su Password: bash-3.2# firmwarepasswd -check Password Enabled: Yes bas ...
- mock测试及jacoco覆盖率
单元测试是保证项目代码质量的有力武器,但是有些业务场景,依赖的第三方没有测试环境,这时候该怎么做Unit Test呢,总不能直接生产环境硬来吧? 可以借助一些mock测试工具来解决这个难题(比如下面要 ...
- VMware安装Centos7超详细过程(图文)-九五小庞
本篇文章主要介绍了VMware安装Centos7超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.软硬件准备 软件:推荐使用VMwear,我用的是VMwear 12 镜像:Ce ...
- Coze Studio:字节跳动 Coze 的开源版本来了!第一时间深度解析
一早起来,看到字节跳动把他们的 AI Agent 开发平台 Coze 开源了,取名 Coze Studio(项目地址:https://github.com/coze-dev/coze-studio). ...
- 携程apollp快速部署DVE集群
1.环境准备: 这里只部署DEV环境 系统环境: 系统 ip ubuntu-18.04-live-server-amd64 192.168.1.112 ubuntu-18.04-live-server ...
- .NET周刊【7月第4期 2025-07-27】
国内文章 记一次.NET MAUI项目中绑定Android库实现硬件控制的开发经历 https://www.cnblogs.com/GreenShade/p/18998698 本文介绍了基于.NET ...