当前位置: 首页 > news >正文

前端 vue 面试题(二)

文章目录

    • 如何让vue页面重新渲染
    • 组件间通信
    • vue为什么要mutation、 action操作
    • 插槽、具名插槽、作用域插槽
    • vue编译使用的是什么库?
    • vue怎么实现treeshaking
      • webpack实现treeshaking
      • 为什么只有es module 能支持 tree shaking
    • mixin 的作用
    • mixin的底层原理
    • nexTick原理
    • vuex和redux的差异

在这里插入图片描述

如何让vue页面重新渲染

在Vue中,可以使用以下几种方式让页面重新渲染:

改变数据状态:Vue中的响应式系统会自动监听数据的变化,并更新相应的视图。因此,可以通过修改数据状态来触发页面重新渲染。

强制重新渲染:可以通过调用组件实例的 $forceUpdate() 方法来强制重新渲染组件。这个方法会跳过依赖跟踪,直接重新渲染组件。但是,这种方法并不推荐使用,因为它会影响性能。

通过重新挂载组件实现:可以通过销毁组件实例,然后再创建一个新的组件实例来实现页面的重新渲染。在Vue中,可以通过调用组件实例的 $destroy() 方法来销毁组件实例。然后再通过调用$mount()方法来创建一个新的组件实例。这种方法可以完全重新渲染组件,但是也会带来一些性能开销。

组件间通信

1、父子组件传值,父组件传给子组件:通过props方法传递数据;子组件传给父组件:$emit方法传递参数。
2、非父子组件间的数据传递,兄弟组件传值eventBus,就是创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件。

3、$refs获取子组件实例
4、vuex存放公共数据
5、$parent 和 $children

vue为什么要mutation、 action操作

mutation是用来直接修改store中的状态的方法,它只能进行同步操作,也就是说不能进行异步操作。而action则是用来提交mutation的方法,它可以进行异步操作,比如发起一个网络请求等。当action执行时,它可以在操作完成之后再调用一个mutation来修改store中的状态。

插槽、具名插槽、作用域插槽

默认插槽:父组件向子组件传递内容模板的机制,作为占位符,用于标识父组件提供的内容应该在哪里被渲染
具名插槽:子组件需要在不同的位置接收不同的内容,使用具名插槽以便在子组件中将内容分法到正确的位置,父组件 <template v-slot:name>,子组件<slot name="name">
作用域插槽:将子组件数据传递给父组件,<slot :data="data">
父组件
<child-component v-slot:default="slotProps">{{ slotProps.data }} </child-component>
更多类容请查看 https://blog.csdn.net/glorydx/article/details/102918914

vue编译使用的是什么库?

Vue.js使用一个名为"Vue Loader"的库进行组件的编译。Vue Loader 是一个官方支持的 webpack loader,用于将 Vue 单文件组件(.vue 文件)转换为 JavaScript 模块。

Vue Loader的主要功能包括:

  1. 解析单文件组件: Vue Loader可以解析.vue文件,提取其中的模板、脚本和样式块。

  2. 预处理器支持: Vue Loader支持多种预处理器,如Babel、TypeScript、Less、Sass等。这使得在Vue组件中使用这些预处理器语言变得非常方便。

  3. 热重载: Vue Loader集成了热重载功能,可以在开发环境中实现对组件的实时更新,而不需要刷新整个页面。

  4. 模块热替换(HMR): Vue Loader通过webpack的模块热替换功能,支持在开发过程中快速替换或添加组件而不需要刷新整个页面。

vue怎么实现treeshaking

vue2的脚手架vue-cli使用的是webpack作为打包工具,webpack在2.0版本以后就已经支持treeshaking。
treeshaking只支持es module 规范的代码

// Bad: CommonJS
const myModule = require('./myModule');// Good: ES2015 Modules
import myModule from './myModule';

webpack实现treeshaking

配置 Babel: 如果你使用了 Babel 来转译你的代码,确保在 Babel 的配置文件(如.babelrc)中启用 modules 选项,并设置为 false,以保留 ES2015 模块的格式。

{"presets": [["@babel/preset-env", { "modules": false }]]
}

使用生产环境模式: 在Webpack的配置中,确保你在生产环境中使用了 mode: ‘production’。这将启用Webpack的一些优化,包括对 Tree Shaking 的支持。

// webpack.config.js
module.exports = {mode: 'production',// other configurations...
};

检查 UglifyJS 配置: 如果你使用 UglifyJS 进行代码压缩,确保其配置中启用了 uglifyOptions.compress 中的 pure_getters 选项。

// webpack.config.js
module.exports = {// other configurations...optimization: {minimizer: [new TerserPlugin({terserOptions: {compress: { pure_getters: true }}})]}
};

vue使用的webpack作为打包工具,因此vue在生产环境下也是默认支持tree shaking的,不需要额外的手动配置。

为什么只有es module 能支持 tree shaking

treeshaking的本质是找到代码之间的依赖关系,这样才能判断哪些代码虽然被创建,却没有使用,哪些代码虽然被引入,也未被使用。因此,一定要满足在编译时就能构建依赖关系的条件。

编译时静态分析: ESM 是在编译时进行静态分析的,这意味着模块的依赖关系在代码执行之前就已经确定。

运行时动态加载: CommonJS 是在运行时动态加载的,模块的依赖关系在代码执行时才解析(打包完成后才执行代码,treeshaking还在打包之前)。

mixin 的作用

Mixin 是一种软件设计模式,通常用于在类之间共享方法或行为。Mixin 允许将一个类的方法添加到另一个类中,从而在不使用继承的情况下实现代码复用。

代码复用: Mixin 提供了一种在类之间共享代码的方式,避免了复制粘贴代码的问题。通过将共享的方法封装在 Mixin 中,可以轻松地在多个类中重复使用。

解耦: Mixin 允许将功能模块化,从而降低了类之间的耦合度。这使得代码更容易维护和理解,因为每个类只需关注自己的核心功能,而不必处理所有可能的变体。

单一职责原则: Mixin 可以帮助遵循单一职责原则,因为每个 Mixin 可以专注于一个特定的功能或行为。这有助于保持代码的清晰性和可维护性。

mixin的底层原理

const LoggerMixin = (target) => ({...target,log(message) {console.log(message);}
});class Dog {bark() {console.log('Woof!');}
}const myDog = LoggerMixin(new Dog());myDog.bark(); // 输出: Woof!
myDog.log('Hello'); // 输出: Hello

mixin的本质是对象的深度拷,然后注入到各个组件实例中去。各个组件的实例一旦被注入mixin之后,这些mixin就实例化一个个对象,这些对象之间的数据都是独立的,不像vuex那样,共享数据,一个组件改变状态,另外的组件也会自动更新。mixin只提供数据的初始值,和通用方法的封装,这些数据和方法,只在本组件实例生效。

nexTick原理

vue更新数据是同步的,但更新dom却是异步的,属于宏任务。按照js事件循环,nextTick属于微任务,但微任务却是在更新dom这个宏任务执行后的回调去触发nextTick的执行,每一次一个宏任务执行完,都会立即清空微任务队列。所以nextTick能够立即执行回调。

vuex和redux的差异

VuexRedux 都是用于管理应用状态(state)的状态管理库,但它们有一些设计和实现上的差异。下面是一些主要的区别:

  1. 框架/库的关联:

    • Vuex 是为 Vue.js 框架设计的状态管理库。它与 Vue.js 高度集成,使得在 Vue 应用中管理状态变得更加简单。
    • Redux 是一个独立的状态管理库,可以与多种 JavaScript 库和框架一起使用,包括 React、Angular 和 Vue 等。
  2. 概念的不同:

    • Vuex 强调在应用中的组件之间共享状态的方式,使用了类似于 Flux 架构的概念,包括 state、getters、mutations、actions。
    • Redux 强调单一不可变的状态树,状态只能通过纯函数(reducers)来修改。Redux 的设计理念受到了函数式编程的影响。
  3. 状态的修改:

    • Vuex 中,通过提交 mutations 来修改状态。Mutations 是同步的,它们用于执行实际的状态修改。
    • Redux 中,通过派发 actions 来修改状态。Actions 是可以是异步的,它们通过纯函数的 reducers 来处理状态的变化。
  4. 异步操作的处理:

    • Vuex 使用 actions 处理异步操作。Actions 可以包含异步逻辑,然后通过提交 mutations 来修改状态。
    • Redux 使用中间件来处理异步操作。Redux 中最常用的中间件是 redux-thunk,它允许 action creators 返回一个函数,而不仅仅是一个普通的 action 对象。
  5. 开发工具:

    • Vuex 提供了 Vue Devtools,可以很容易地在浏览器中监控和调试 Vuex 应用。
    • Redux 也有强大的开发者工具,例如 Redux DevTools,可以用于监控和调试 Redux 应用。
      在这里插入图片描述

相关文章:

前端 vue 面试题(二)

文章目录 如何让vue页面重新渲染组件间通信vue为什么要mutation、 action操作插槽、具名插槽、作用域插槽vue编译使用的是什么库&#xff1f;vue怎么实现treeshakingwebpack实现treeshaking为什么只有es module 能支持 tree shaking mixin 的作用mixin的底层原理nexTick原理vue…...

MySQL 高可用架构

MySQL 是实际生产中最常用的数据库&#xff0c;生产环境数据量极为庞大&#xff0c;对性能和安全要求很高&#xff0c;单机的 MySQL 是远远达不到的&#xff0c;所以必须搭建一个主从复制架构&#xff0c;同时可以基于一些工具实现高可用架构&#xff0c;在此基础上&#xff0c…...

JVM虚拟机:G1垃圾回收器的日志分析

本文重点 本文我们将学习G1垃圾回收器的日志 使用 执行命令 java -Xms20M -Xmx20M -XX:PrintGCDetails -XX:UseG1GC 类名 分析 前面我们学习了G1垃圾回收器&#xff0c;它的回收有三种可能&#xff1a; YGC FGC MixedGC GC pause表示STW,Evacuation表示复制对象&#xff0c;…...

解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)

当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果&#xff0c;并提供了一种平滑的转换方式&#xff0c;使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…...

【挑战业余一周拿证】一、亚马逊云科技简介 - 第 3 节 - 云计算

第 3 节 - 云计算 在深入了解亚马逊云科技的各个部分之前&#xff0c;让我们先缩小视野&#xff0c;对云进行一个合理的定义。云计算就是通过互联网按需提供 IT 资源并采用按需付费定价模式&#xff0c;下面&#xff0c;我们将进行详细说明。 按需提供表示的是亚马逊云科技会在…...

4. 无向图的各连通分支

题目 求解无向图的各连通分支 输入&#xff1a; 第一行为图的节点数n&#xff08;节点编号0至n-1&#xff0c;0<n<10&#xff09; 从第二行开始列出图的边&#xff0c;-1表示输入结束 输出&#xff1a; 输出每个连通分支的广度优先搜索序列&#xff08;从连通分支的最…...

《golang设计模式》第三部分·行为型模式-08-状态模式(State)

文章目录 1. 概念1.1 作用1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概念 1.1 作用 状态&#xff08;State&#xff09;指状态对象&#xff0c;用于封装上下文对象的特定状态行为&#xff0c;使得上下文对象在内部状态改变时能够改变其自身的行为。 1.1 角色…...

tp8 使用rabbitMQ(3)发布/订阅

发布/订阅 当我们想把一个消息&#xff0c;发送给 多个消费者的时候&#xff0c;我们把这种模式叫做发布/订阅模式&#xff0c;比如我们做两个消费者&#xff0c;其中一个消费者把消息写入磁盘中&#xff0c;别一个消费者把消息结果输出到屏幕上&#xff0c;就要用到发布订阅模…...

【nlp】3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层)

3.4 Transformer论文复现:2. 编码器部分(规范化层、子层连接结构、编码器层) 2.6 规范化层2.6.1 规范化层的作用2.6.2 规范化层的代码实现2.6.3 规范化层总结2.7 子层连接结构2.7.1 子层连接结构2.7.2 子层连接结构的代码实现2.7.3 子层连接结构总结2.8 编码器层2.8.1 编码器…...

面试:ShardingSphere问题

文章目录 什么是ShardingSphere&#xff0c;它的主要功能是什么&#xff1f;ShardingSphere的核心模块有哪些&#xff1f;他们是如何工作的&#xff1f;ShardingSphere 的读写分离是如何实现的&#xff1f;如何配置ShardingSphere的数据分片策略&#xff1f;ShardingSphere支持…...

NX二次开发UF_CURVE_ask_offset_direction_2 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_offset_direction_2 Defined in: uf_curve.h int UF_CURVE_ask_offset_direction_2(UF_STRING_p_t input_curves, double offset_direction_vector [ 3 ] , double dra…...

【研究中】sql server权限用户设置23.11.26

--更新时间2023.11.26 21&#xff1a;30 负责人&#xff1a;jerrysuse DBAliCMSIF EXISTS (select * from sysobjects where namehkcms_user)--判断是否存在此表DROP TABLE hkcms_user CREATE TABLE hkcms_user (id int primary key identity(1, 1),username char(32) NOT N…...

java多线程一

1、什么是线程 线程&#xff08;Thread&#xff09;是一条程序内部的一条执行流程。 程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序。 2、什么是多线程 多线程&#xff08;multithreading&#xff09;&#xff0c;是指从软件或者硬件上实现多个线程并发执…...

电脑技巧:电脑常见蓝屏、上不了网等故障及解决办法

目录 一、电脑蓝屏 常见原因1: 病毒木马 常见原因2: 安装了不兼容的软件 二、电脑不能上网 常见原因1: 新装系统无驱动 常见原因2: DNS服务器异常 常见原因3: 硬件问题 三、电脑没声音 常见原因1: 未安装驱动 常见原因2: 硬件故障 四、电脑屏幕不显示 常见原因1: 显…...

大语言模型损失函数详解

我们可以把语言模型分为两类&#xff1a; 自动回归式语言模型&#xff1a;自动回归式语言模型在本质上是单向的&#xff0c;也就是说&#xff0c;它只沿着一个方向阅读句子。正向&#xff08;从左到右&#xff09;预测&#xff1b;反向&#xff08;从右到左&#xff09;预测。…...

Spring Boot 3 集成 Knife4j

基础环境 SpringBoot : 3.0.6 Java: jdk-17.0.5 Maven: 3.6.1依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xs…...

BetaFlight模块设计之三十六:SoftSerial

BetaFlight模块设计之三十六&#xff1a;SoftSerial 1. 源由2. API接口2.1 openSoftSerial2.2 onSerialRxPinChange2.3 onSerialTimerOverflow2.4 processTxState2.5 processRxState 3. 辅助函数3.1 applyChangedBits3.2 extractAndStoreRxByte3.3 prepareForNextRxByte 4. 总结…...

PC访问华为昇腾开发板的摸索过程

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近要折腾华为昇腾开发板&#xff08;官方名称叫&#xff1a;Atlas 200I DK&#xff09;。先是按照官方教程折腾&#xff1a;Atlas200DK环境部署。我发现…...

C++学习之路(六)C++ 实现简单的工具箱系统命令行应用 - 示例代码拆分讲解

简单的工具箱系统示例介绍: 这个示例展示了一个简单的工具箱框架&#xff0c;它涉及了几个关键概念和知识点&#xff1a; 面向对象编程 (OOP)&#xff1a;使用了类和继承的概念。Tool 是一个纯虚类&#xff0c;CalculatorTool 和 FileReaderTool 是其派生类。 多态&#xff1…...

redis运维(十四) hash缓存案例

一 缓存案例 ① 需求 ② 个人理解 策略&#xff1a;不更新缓存&#xff0c;而是删除缓存大部分观点认为&#xff1a;1、做缓存不应该是去更新缓存,而是应该删除缓存2、然后由下个请求去缓存,发现不存在后再读取数据库,写入redis缓存 高并发场景下,到底先更新缓存还是先更…...

时间序列平稳性:从理论到实战检验指南

1. 为什么时间序列需要平稳性&#xff1f; 想象一下你每天记录体重变化。如果体重在60kg上下小幅波动&#xff08;比如59.5kg到60.5kg&#xff09;&#xff0c;我们很容易预测明天的体重大概率也在60kg附近。但如果体重每周增加1kg&#xff08;从60kg持续增长到70kg&#xff09…...

丹青识画系统与STM32嵌入式项目结合:智能相框原型开发

丹青识画系统与STM32嵌入式项目结合&#xff1a;智能相框原型开发 1. 项目缘起&#xff1a;当老相框遇上新AI 你有没有想过&#xff0c;家里墙上那个安安静静的相框&#xff0c;除了展示照片&#xff0c;还能做些什么&#xff1f; 我手头正好有几块闲置的STM32开发板和几块小…...

网盘直链下载助手:八大主流网盘真实下载地址获取终极指南

网盘直链下载助手&#xff1a;八大主流网盘真实下载地址获取终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

【K8S专题】深入浅出 Kubernetes 探针:存活、就绪与启动探针的原理与实战指南

深入浅出 Kubernetes 探针&#xff1a;存活、就绪与启动探针的原理与实战指南一、 引言&#xff1a;为什么我们需要探针&#xff1f;二、 核心概念详解&#xff1a;三大探针的角色定位1. 存活探针&#xff1a;看门狗2. 就绪探针&#xff1a;流量守门人3. 启动探针&#xff1a;慢…...

你用真金白银买股票,钱到底被谁赚走了? 所谓的“市值蒸发“,只是把那些本来就不存在的、基于预期的信用货币,给抹掉了而已

你用真金白银买股票,钱到底被谁赚走了? 目录 你用真金白银买股票,钱到底被谁赚走了? 一、先讲一个100万变100亿的完整故事 第一步:公司成立(第0年) 第二步:天使轮融资(第1年) 第三步:A轮融资(第2年) 第四步:B轮融资(第3年) 第五步:IPO上市(第4年) 第六步:…...

GTE中文文本嵌入模型智能助手:客服工单语义聚类实战

GTE中文文本嵌入模型智能助手&#xff1a;客服工单语义聚类实战 1. 引言&#xff1a;从客服工单的烦恼说起 想象一下&#xff0c;你是一家电商公司的客服主管。每天&#xff0c;你的团队要处理成千上万条用户反馈和工单。用户的问题五花八门&#xff1a;“我的快递怎么还没到…...

直播运营需要哪些数据分析能力?场观、停留、成交和投流怎么联动分析

直播运营数据分析的核心能力直播运营需要掌握多维度的数据分析能力&#xff0c;以优化直播效果并提升转化率。核心能力包括数据采集、清洗、可视化、建模及解读能力。CDA数据分析师证书的课程体系涵盖了这些核心技能&#xff0c;为从业者提供系统化训练。能力维度具体内容CDA相…...

从月损耗20万到年增收300万:零售老板180天蜕变

李老板在二线城市经营着5家社区超市&#xff0c;年营收5000万&#xff0c;利润却越来越薄。一个残酷的数字让他夜不能寐&#xff1a;因线上线下系统割裂、手工操作繁多&#xff0c;每月生鲜损耗和运营错漏造成的损失超过20万元。他意识到&#xff0c;不变革&#xff0c;就是在慢…...

2026-04-10:连接非零数字并乘以其数字和Ⅱ。用go语言,对每个查询区间 [l, r],按以下步骤处理字符串中的连续片段 s[l..r]: 1.在该子串中按从左到右的顺序,把所有“非零”字符数字

2026-04-10&#xff1a;连接非零数字并乘以其数字和Ⅱ。用go语言&#xff0c;对每个查询区间 [l, r]&#xff0c;按以下步骤处理字符串中的连续片段 s[l…r]&#xff1a; 1.在该子串中按从左到右的顺序&#xff0c;把所有“非零”字符数字依次拼接成一个新整数 x&#xff1b;如…...

Js2Py错误处理与调试:解决常见问题的终极指南

Js2Py错误处理与调试&#xff1a;解决常见问题的终极指南 【免费下载链接】Js2Py JavaScript to Python Translator & JavaScript interpreter written in 100% pure Python&#x1f680; Try it online: 项目地址: https://gitcode.com/gh_mirrors/js/Js2Py Js2Py是…...