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

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

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

  • 相关阅读:
    sql注入(其他)
    C++中如何使用通用字符名输入UNICODE字符
    【深度学习】 Python 和 NumPy 系列教程(八):Python类
    centos下
    八位阿里p8耗时十年总结出Java面试复盘手册,带你实现逆风翻盘
    数字疗法009 | “接受”还是“拒绝”?心理治疗背后的数字干预
    【1. 操作系统—概述】
    Java基于PHP+MySQL干洗店管理系统的设计与实现
    单片机C语言实例:14、音频输出
    RHEL8.4 安装docker&docker-compose
  • 原文地址:https://blog.csdn.net/qq_45902692/article/details/126588149
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号