八股文-Vue篇(持续更新)

news2026/5/10 19:35:03

八股文-Vue篇

  • 一、Vue2
    • 1. 关于生命周期
      • 1.1 生命周期有哪些?发送请求在created还是mounted?
      • 1.2 为什么发送请求不在beforeCreate里?beforeCreate和created有什么区别?
      • 1.3 在created中如何获取dom?
      • 1.4 一旦进入到组件会执行哪些生命周期?
      • 1.5 第二次或者第N次进去组件会执行哪些生命周期?
      • 1.6 父子组件生命周期执行顺序?
      • 1.7 加入keep-alive会执行哪些生命周期?
      • 1.8 你在什么情况下用过哪些生命周期?说一说生命周期使用场景?
    • 2. 关于组件
      • 2.1 组件通讯方式
      • 2.2 父组件如何直接修改子组件的值
      • 2.3 子组件如何直接修改父组件的值
      • 2.4 如何找到父组件
      • 2.5 如何找到根组件
      • 2.6 keep-alive
      • 2.7 slot插槽
      • 2.8 provide、inject
      • 2.9 如何封装组件
    • 3. 关于Vuex
      • 3.1 vuex有哪些属性
      • 3.2 vuex使用state值
      • 3.3 vuex的getters值修改
      • 3.4 vuex的mutations和actions的区别
      • 3.5 vuex持久化存储
    • 4. 关于路由
      • 4.1 路由的模式和区别
      • 4.2 子路由和动态路由
      • 4.3 路由传值
      • 4.4 路由故障
      • 4.5 $router 和 $route的区别
      • 4.6 导航守卫

一、Vue2

1. 关于生命周期

1.1 生命周期有哪些?发送请求在created还是mounted?

生命周期描述
beforeCreate组件实例被创建之前(没有dom,没有$data)
created组件实例已经完全创建(没有dom,有$data)
beforeMount组件挂载之前(没有dom,有$data)
mounted组件被挂载到实例上之后(有dom,有$data)
beforeUpdate组件数据发生变化,更新之前
updated组件数据更新之后
beforeDestroy组件实例销毁之前
destroyed组件实例销毁之后

mounted可以操作dom又可以操作data,还可以操作子组件;而在created的时候不能操作dom也不能操作子组件。
发送请求是异步任务,会在同步任务执行完毕之后执行,即获取到数据也是会在mounted执行完之后。
这个问题具体要看项目和业务情况,因为组件的加载顺序是,会先执行父组件的前3个生命周期,再执行子组件的前4个生命周期。如果业务是父组件引入子组件,并且优先加载子组件的数据,那么在父组件中当前请求要放在mounted中,让子组件的请求先去执行,让子组件的数据先加载出来。

1.2 为什么发送请求不在beforeCreate里?beforeCreate和created有什么区别?

如果请求是在methods里封装好的,在beforeCreate里是拿不到methods的方法的。
beforeCreate阶段没有$data ,拿不到methods方法,created阶段有$data,拿得到methods方法。

1.3 在created中如何获取dom?

  1. 异步代码获取,例如setTimeout
  2. 使用vue的this.$nextTick

1.4 一旦进入到组件会执行哪些生命周期?

beforeCreatecreatedbeforeMountmounted

1.5 第二次或者第N次进去组件会执行哪些生命周期?

如果当前组件加入了keep-alive,只会执行activated
如果没有加入keep-alive依然执行前四个生命周期beforeCreatecreatedbeforeMountmounted

1.6 父子组件生命周期执行顺序?

父组件 beforeCreate created beforeMount
子组件 beforeCreate created beforeMount mounted
父组件 mounted

1.7 加入keep-alive会执行哪些生命周期?

如果使用了keep-alive组件,当前组件会额外增加两个生命周期。
activated:被 keep-alive 缓存的组件激活时调用
deactivated:被 keep-alive 缓存的组件失活时调用。

如果当前组件加入了keep-alive,第一次进入这个组件会执行5个生命周期:beforeCreate created activated beforeMount mounted

1.8 你在什么情况下用过哪些生命周期?说一说生命周期使用场景?

created:单一组件进行请求
mounted:有父子组件关系的时候,进行请求;同步操作dom
activated:处理缓存
beforeDestroy:关闭页面的时候进行数据记录

2. 关于组件

2.1 组件通讯方式

父传子:

  1. v-bind绑定props。不能传孙,且有多个子组件时需要一个一个操作;子不能直接修改父组件的数据
  2. 子组件直接使用父组件数据 this.$parent。子能直接修改父组件的数据
  3. 依赖注入provide、inject。不用逐级传递,可以实现直接传递给孙

子传父:

  1. 子组件自定义事件 this.$emit
  2. 父组件直接使用子组件数据:this.$children[index].xxxthis.$refs[name].xxx

兄弟互传:

  1. EventBus($on接收方,$emit发送方)

2.2 父组件如何直接修改子组件的值

this.$children[index].xxxthis.$refs[name].xxx

2.3 子组件如何直接修改父组件的值

this.$parent.xxx

2.4 如何找到父组件

this.$parent

2.5 如何找到根组件

this.$root

2.6 keep-alive

用来缓存当前组件

2.7 slot插槽

  • 匿名插槽
  • 具名插槽
  • 作用域插槽:对组件传递 props 那样,向一个插槽的出口上传递 attributes

2.8 provide、inject

依赖注入,用来实现给后辈组件传递数据

2.9 如何封装组件

抽取复用部分内容,用slot插槽去实现父组件可以自定义部分特殊的内容;通过v-bind绑定props去实现获取父组件数据;通过自定义事件去实现给父组件传递数据。

3. 关于Vuex

3.1 vuex有哪些属性

Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间的数据共享。

  • State用来存储公共数据源。全局共享属性。
  • Mutation用于同步变更state中的数据。
  • Action用于异步变更state中的数据,但是在Action中还是要用过触发Mutation的方式间接变更数据。
  • Getter用于对Store中的数据进行加工处理形成新的数据(类似于计算属性),Store中数据发生变化,Getter中的数据也会变化。针对state数据进行二次计算。
  • moudle属性是将store分割成模块。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。

3.2 vuex使用state值

this.$store.state.xxx

computed: { ...mapState(['全局数据名称1','全局数据名称2',...]) }
区别:使用this.$store的方式可以直接修改(不推荐),使用辅助函数的方式不能直接修改

3.3 vuex的getters值修改

getters不可以修改

3.4 vuex的mutations和actions的区别

相同点:都是来存放全局方法的;不能有return值
区别:mutation是同步的,actions是异步的;mutation是用来修改state的,action是用来提交mutation的

3.5 vuex持久化存储

vuex本身不是持久化存储,它只是一个全局数据管理仓库。

实现方式:

  1. 自己写localStorage
  2. 使用vuex-persistedstate插件

4. 关于路由

4.1 路由的模式和区别

路由模式:history、hash

区别:

  • 表象不同:hash路径有一个#,history/
  • history找不到当前页面会发送请求,而hash不会
  • 项目打包前端自测的时候,hash可以看到内容,hsitory默认情况是看不到内容的

4.2 子路由和动态路由

详请-> Vue Router基础知识整理

4.3 路由传值

详请-> Vue Router基础知识整理

4.4 路由故障

当前页跳当前页,路径不变,参数变

import Vue from 'vue'
import VueRouter from 'vue-router'
 
// 解决路由重复跳转错误
const routerPush = VueRouter.prototype.push;
VueRouter.prototype.push = function (location) {
    return routerPush.call(this, location).catch(err => { })
};
 
Vue.use(VueRouter)

4.5 $router 和 $route的区别

  • $router 路由管理对象(路由跳转)
  • $route 路由单体对象,指某一条路由(获取当前路径相关)

4.6 导航守卫

  1. 全局守卫:全局前置守卫 router.beforeEach:路由进入前;全局后置钩子 router.afterEach:路由进入后

  2. 路由独享守卫: beforeEnter 只在进入路由时触发

  3. 组件内守卫:beforeRouteEnter在渲染该组件的对应路由被验证前调用、 beforeRouteUpdate在当前路由改变,但是该组件被复用时调用、 beforeRouteLeave在导航离开渲染该组件的对应路由时调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1791293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高并发系统限流原理

短时间内巨大的访问流量,我们如何让系统在处理高并发的同时还能保证自身系统的稳定性?估计有人会说,增加机器就可以了,因为我的系统架构设计就是按照分布式思想进行架构设计的,所以可以只需要增加机器就可以解决问题了…

代码随想录算法训练营day41

题目:01背包理论基础、416. 分割等和子集 参考链接:代码随想录 动态规划:01背包理论基础 思路:01背包是所有背包问题的基础,第一次看到比较懵,完全不知道dp数据怎么设置。具体分析还是dp五部曲&#xff…

Vue3实战笔记(58)—从零开始掌握Vue3插槽机制,基础入门

文章目录 前言插槽基础入门总结 前言 不论是组件封装还是分析源码,实际开发中经常接触插槽,插槽是干什么用的呢?组件之间能够接收任意类型的 JavaScript 值作为 props,但组件要如何接收模板内容呢?在某些场景中&#…

openssl 常用命令demo

RSA Private Key的结构(ASN.1) RSAPrivateKey :: SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e privateExponent INTEGER, -- d prime1 INTEGER, -- …

k8s学习--ConfigMap详细解释与应用

文章目录 一 什么是configmapConfigMap 的好处ConfigMap 的限制 二.创建ConfigMap的4种方式1.在命令行指定参数创建2.在命令行通过多个文件创建3.在命令行通过文件提供多个键值对创建4.YAML资源清单文件创建 三 configmap的两种使用方法1.通过环境变量的方式传递给pod2.通过vol…

vue3+typescript 使用Codemirror

安装 // npm npm install codemirror-editor-vue3 codemirror^5.65.12// ts版 还需安装: npm install types/codemirror全局注册 修改main.ts: import { createApp } from vueimport App from ./App.vueimport { InstallCodemirro } from "code…

文件编码概念

文件的读取 open()函数: 打开一个已存在的文件,或者创建一个新文件 open(name,mode,encoding) name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径) mode:设置打开文件的模式(访问模式)&am…

LabVIEW步进电机的串口控制方法与实现

本文介绍了在LabVIEW环境中通过串口控制步进电机的方法,涵盖了基本的串口通信原理、硬件连接步骤、LabVIEW编程实现以及注意事项。通过这些方法,用户可以实现对步进电机的精确控制,适用于各种自动化和运动控制应用场景。 步进电机与串口通信…

【Linux】信号(一)

信号我们将从信号产生,信号的保存,信号处理分别进行讲解~ 至少大思路是这样。开始之前还要进行一些基础知识的铺垫。 目录 从生活中提炼一些结论:信号概念的一些储备:信号产生:一、kill指令:二、键盘组合键…

[数据集][目标检测]轮胎检测数据集VOC+YOLO格式439张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):439 标注数量(xml文件个数):439 标注数量(txt文件个数):439 标注类别…

面试官:核心线程数为零时,线程池会处理任务吗?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

Redis篇 list类型在Redis中的命令操作

list在redis基本的命令 一.基本命令1.lpush和range2.lpushx rpushx3.lpop rpop4.lindex linsert llen5.lrem6.ltrim lset7.blpop brpop 一.基本命令 list在redis中相当于数组或者顺序表. 1.lpush和range 2.lpushx rpushx 3.lpop rpop 4.lindex linsert llen 如果要插入的列表中…

详解 Spark 核心编程之累加器

累加器是分布式共享只写变量 一、累加器功能 ​ 累加器可以用来把 Executor 端的变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在 Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Dri…

程序媛:拽姐

更多精彩内容在公众号。 最近都在玩梗图,我也来玩下拽姐的梗图。来说说拽姐做为程序媛的痛。 程序媛的痛不在于996,而在于无休止的攻关。拽姐刚入职听领导说攻关不多,一年也就一次,拽姐心中暗喜,觉得来对了地方。结果…

MySQL之查询性能优化(六)

查询性能优化 查询优化器 9.等值传播 如果两个列的值通过等式关联,那么MySQL能够把其中一个列的WHERE条件传递到另一列上。例如,我们看下面的查询: mysql> SELECT film.film_id FROM film-> INNER JOIN film_actor USING(film_id)-> WHERE f…

百度地图API 教程使用 嵌套到vue3项目中使用,能够定位并且搜索地点名称位置,反向解析获取经度和维度

文章目录 目录 文章目录 流程 小结 概要安装流程技术细节小结 概要 注册百度地图成为开发者: 登录百度账号 注册成功开始下一步 百度地图API是百度提供的一组开发接口,用于在自己的应用程序中集成地图功能。通过百度地图API,您可以实现地图…

1Panel 搭建 halo博客

线上服务器一直闲置,刷到视频 1Panel 能更好管理服务器,还能快速搭建博客,便上手试试,的确很方便,顺手记录一下。 零、准备工作 一台服务器(按需购买,此处准备的阿里云服务器一台,也…

负载均衡算法深度探析:F5技术在高效流量管理中的应用

传统的单一服务器模式下,随着用户请求量的增加,单个服务器可能会承受过重的压力,导致响应速度下降甚至系统崩溃,负载均衡技术应运而生。它广泛应用于各种软硬件系统中,将网络流量以某种算法合理分配给各个节点&#xf…

电阻、电容和电感测试仪设计

在现代化生产、学习、实验当中,往往需要对某个元器件的具体参数进行测量,在这之中万用表以其简单易用,功耗低等优点被大多数人所选择使用。然而万用表有一定的局限性,比如:不能够测量电感,而且容量稍大的电容也显得无能为力。所以制作一个简单易用的电抗元器件测量仪是很…

鸿蒙轻内核M核源码分析系列七 动态内存Dynamic Memory

内存管理模块管理系统的内存资源,它是操作系统的核心模块之一,主要包括内存的初始化、分配以及释放。 在系统运行过程中,内存管理模块通过对内存的申请/释放来管理用户和OS对内存的使用,使内存的利用率和使用效率达到最优&#x…