码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • web前端面试高频考点——Vue面试题


    以下问题的详细解答,参照下面链接:

    内容参考链接
    Vue基本使用Vue的基本使用(一文掌握Vue最基础的知识点)
    Vue通信和高级特性Vue组件间的通信及高级特性(多种组件间的通信、自定义v-model、nextTick、插槽)
    Vue高级特性Vue的高级特性(动态组件、异步加载、keep-alive、mixin、Vuex、Vue-Router)
    Vue原理1Vue原理(理解MVVM模型、深度/监听data变化、监听数组变化、深入了解虚拟DOM)
    Vue原理2Vue原理(diff算法、模板编译、组件渲染和更新、JS实现路由)
    Vue面试题Vue2.x高频面试题
    Vue3.x面试考点Vue3.x高频面试考点

    文章目录

        • 1、v-show 和 v-if 的区别
        • 2、为何在 v-for 中使用 key
        • 3、描述 Vue 组件生命周期(父子组件)
        • 4、Vue 组件如何通讯(常见)
        • 5、描述组件渲染和更新的过程
        • 6、双向数据绑定 v-model 的实现原理
        • 7、对MVVM的理解
        • 8、computed 的特点
        • 9、为何组件 data 必须是一个函数
        • 10、ajax 请求应该放在哪个生命周期
        • 11、如何将组件所有 props 传递给子组件
        • 12、如何自己实现 v-model
        • 13、多个组件有相同的逻辑,如何抽离?
        • 14、何时使用异步组件?
        • 15、何时使用 keep-alive
        • 16、何时需要使用 beforeDestory
        • 17、什么是作用域插槽
        • 18、Vuex 中 action 和 mutation 有什么区别
        • 19、Vue-router 常用的路由模式
        • 20、如何配置 Vue-router 异步加载
        • 21、用 vnode 描述一个 DOM 结构
        • 22、监听 data 变化的核心 API 是什么
        • 23、Vue 如何监听数组变化
        • 24、描述响应式原理
        • 25、diff 算法的时间复杂度
        • 26、简述 diff 算法过程
        • 27、Vue 为何是异步渲染,$nextTick 何用?
        • 28、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 组件生命周期(父子组件)

    • 单组件生命周期图(摘自官网)
      在这里插入图片描述

    • 父子组件生命周期关系

    在这里插入图片描述

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

    • 父子组件 props 和 this.$emit
    • 自定义事件 event.$on event.$off event.$emit
    • vuex

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

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

    在这里插入图片描述

    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">
    
    • 1

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    子组件:

    <template>
      <a :href="url">
        <slot :slotData="website">
          {{ website.subTitle }}
        </slot>
      </a>
    </template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    • action 中可以处理异步,mutation 不可以
    • mutation 做原子操作
    • action 可以整合多个 mutation

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

    • hsah 模式
    • H5 histoty(需要服务器支持)
    • 两者的比较

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

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

    21、用 vnode 描述一个 DOM 结构

    DOM 结构

    <div id="div1" class="container">
        <p>vdom</p>
        <ul style="font-size: 20px">
            <li>a</li>
        </ul>
    </div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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'
            }
          ]
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    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 层面的优化
    • 前端通用的性能优化,如图片懒加载

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

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

  • 相关阅读:
    如何设置 Git 短命令
    单元测试,集成测试,系统测试的区别是什么?
    为什么官方不建议使用uuid做MySQL主键
    阿里28面Java岗总结出10万字面试小抄,让你offer拿到手软!
    webpack
    SAP POorPI RFC接口字段调整后需要的操作-针对SP24及以后的PO系统
    2022春山东大学人工智能导论期末题库附答案
    计算机毕业设计Javaweb高校车辆调度系统设计与实现(源码+系统+mysql数据库+lw文档)
    【Go学习之 go mod】gomod小白入门,在github上发布自己的项目(项目初始化、项目发布、项目版本升级等)
    只把 EasyX 拷贝进项目里,方便发给没有安装 EasyX 的人编译(以 VS2022 为例)
  • 原文地址:https://blog.csdn.net/qq_45902692/article/details/126588149
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号