web前端面试高频考点——Vue面试题

简介: web前端面试高频考点——Vue面试题

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

v-show 通过 CSS display 控制显示和隐藏

v-if 组件真正的渲染和销毁,而不是显示和隐藏

频繁切换显示状态用 v-show,否则用 v-if

2、为何在 v-for 中使用 key

必须用 key,且不能是 index 和 random

diff 算法中通过 tag 和 key 来判断,是否是 sameNode

减少渲染次数,提升渲染性能

3、描述 Vue 组件生命周期(父子组件)

单组件生命周期图(摘自官网)

818683df27a844a08e3ff955d9d907c0.png


父子组件生命周期关系


2c0553eaf3924af7bb1f101382ac8979.png


4、Vue 组件如何通讯(常见)

父子组件 props 和 this.$emit

自定义事件 event.$on event.$off event.$emit

vuex

5、描述组件渲染和更新的过程

vue原理的三大模块:响应式、vdom和diff、模板编译

d4241b45763042a788ab9e822515c2cb.png


6、双向数据绑定 v-model 的实现原理

input 元素的 value = this.name

绑定 input 事件 this.name = $event.target.value

data 更新触发 re-render

7、对MVVM的理解

8、computed 的特点

缓存,data 不变不会重新计算

提高性能

9、为何组件 data 必须是一个函数

实际上,.vue 文件被编写出来其实是一个 class 类

在每个地方使用组件的时候,相当于是实例化

在实例化的时候去执行 data,如果 data 不是函数的话,那么每一个组件实例的数据就共享了

10、ajax 请求应该放在哪个生命周期

mounted(组件渲染完成,DOM加载完成)

JS 是单线程的,ajax 异步获取数据

放在 mounted 之前没有用,只会让逻辑更加混乱

11、如何将组件所有 props 传递给子组件

$props

<User v-bind = "$props">

12、如何自己实现 v-model

使用 :value 而没用 v-model

change 和 model.event 名字对应起来即可

<template>
  <input
    type="text"
    :value="text"
    @input="$emit('change', $event.target.value)"
  />
</template>
<script>
export default {
  model: {
    prop: "text", //对应到 props text
    event: "change",
  },
  props: {
    text: String,
  },
};
</script>

13、多个组件有相同的逻辑,如何抽离?

参考链接


mixin

以及 mixin 的一些缺点

14、何时使用异步组件?

加载大组件

路由异步加载

15、何时使用 keep-alive

缓存组件,不需要重复渲染

如多个静态 tab 页的切换

优化性能

16、何时需要使用 beforeDestory

绑定自定义事件 event.$off

清除定时器

绑定自定义的 DOM 事件,如 window scroll 等

17、什么是作用域插槽

插槽的内容可能想要同时使用父组件域内和子组件域内的数据

父组件:


用父组件的 url && 子组件的 title

<template>
  <div>
    <ScopedSlot :url="website.url">
      <template v-slot="slotProps">
        {{ slotProps.slotData.title }}
      </template>
    </ScopedSlot>
  </div>
</template>

子组件:


<template>
  <a :href="url">
    <slot :slotData="website">
      {{ website.subTitle }}
    </slot>
  </a>
</template>

18、Vuex 中 action 和 mutation 有什么区别

action 中可以处理异步,mutation 不可以

mutation 做原子操作

action 可以整合多个 mutation

19、Vue-router 常用的路由模式

hsah 模式

H5 histoty(需要服务器支持)

两者的比较

20、如何配置 Vue-router 异步加载

component: () => import './xxx'

21、用 vnode 描述一个 DOM 结构

DOM 结构

<div id="div1" class="container">
    <p>vdom</p>
    <ul style="font-size: 20px">
        <li>a</li>
    </ul>
</div>

vnode 形式

{
  tag: 'div',
  props: {
    className: 'container',
    id: 'div1'
  }
  children: [
    {
      tag: 'p',
      children: 'vdom'
    },
    {
      tag: 'ul',
      props: {style: 'font-size: 20px'}
      children: [
        {
          tag: 'li',
          children: 'a'
        }
      ]
    }
  ]
}

22、监听 data 变化的核心 API 是什么

Object.defineProperty

以及深度监听、监听数组

但也有缺点

23、Vue 如何监听数组变化

Object.defineProperty 不能监听数组变化

重新定义原型,重写 push pop 等方法,实现监听

Proxy 可以原生支持监听数组变化

24、描述响应式原理

监听 data 变化

组件渲染和更新的流程

25、diff 算法的时间复杂度

O(n)

在 O(n^3)基础上做了一些调整

26、简述 diff 算法过程

patch(elem, vnode) 和 patch(vnode, newVnode)

-patchVnode 和 addVnodes 和 removeVnodes

updateChildren(key 的重要性)

27、Vue 为何是异步渲染,$nextTick 何用?

异步渲染(以及合并 data 修改),以提高渲染性能

$nextTick 在 DOM 更新完之后,触发回调

28、Vue 常见性能优化方式

合理使用 v-show 和 v-if

合理使用 computed

v-for 时加 key,以及避免和 v-if 同时使用

自定义事件、DOM 事件及时销毁

合理使用异步组件

合理使用 keep-alive

data 层级不要太深

使用 vue-loader 在开发环境做模板编译(预编译)

webpack 层面的优化

前端通用的性能优化,如图片懒加载

不积跬步无以至千里,不积小流无以成江海


点个关注不迷路,持续更新中…

相关文章
|
8月前
|
并行计算 前端开发 JavaScript
Web Worker:让前端飞起来的隐形引擎
在现代 Web 开发中,前端性能优化是一个至关重要的课题,尤其是对于计算密集型的应用,如图像处理、视频处理、大规模数据分析等任务。单线程的 JavaScript 引擎常常成为性能瓶颈,导致应用变得迟缓。Web Worker,作为一种强大的技术,使得前端能够在后台进行并行计算,从而实现高效的任务处理,不影响主线程的运行和用户的交互体验。
714 108
|
8月前
|
JavaScript 前端开发 Java
前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
740 72
前端框架选择之争:jQuery与Vue在现代Web开发中的真实地位-优雅草卓伊凡
|
10月前
|
移动开发 前端开发 JavaScript
前端web创建命令
本项目使用 Vite 搭建 Vue + TypeScript 开发环境,并基于 HTML5 Boilerplate 提供基础模板,快速启动现代前端开发。
176 2
|
10月前
|
Web App开发 编解码 移动开发
零基础音视频入门:你所不知道的Web前端音视频知识
本文回顾了Web端音视频的发展历程,同时还介绍了视频的编码、帧率、比特率等概念,提到了Canvas作为视频播放的替代方案,以及FFmpeg在音视频处理中的重要作用等知识。
308 1
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
982 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
398 6
|
消息中间件 前端开发 JavaScript
探索微前端架构:构建现代Web应用的新策略
本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1478 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
841 0
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
下一篇
开通oss服务