前端 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 应用。
      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

csdn博客编写技巧

随便记录一下csdn博客编写时候用的到技巧&#xff0c;以作备忘。 1. 表格 1.1 Markdown-Table-Generator 这个是csdn编辑器中&#xff0c;工具栏自带的表格用法。主要优点是比较直观&#xff0c;缺点是无法设置表格中行列的宽高。 用法&#xff1a; | 表头一 | 表头二 | |-…

5 时间序列预测入门:LSTM+Transformer

0 引言 论文地址&#xff1a;https://arxiv.org/abs/1706.03762 1 Transformer Transformer 模型是一种用于处理序列数据的深度学习模型&#xff0c;主要用于解决自然语言处理&#xff08;NLP&#xff09;任务。它在许多 NLP 任务中取得了重大突破&#xff0c;如机器翻译、文本…

【用unity实现100个游戏之17】从零开始制作一个类幸存者肉鸽(Roguelike)游戏3(附项目源码)

文章目录 本节最终效果前言近战武器控制近战武器生成升级增加武器伤害和数量查找离主角最近的敌人子弹预制体生成子弹发射子弹参考源码完结 本节最终效果 前言 本节紧跟着上一篇&#xff0c;主要实现武器功能。 近战武器 新增Bullet&#xff0c;子弹脚本 public class Bull…

java三大集合类--List

List Set Map 一、List 几个小问题&#xff1a; 1、接口可以被继承吗&#xff1f;&#xff08;可以&#xff09; 2、接口可以被多个类实现吗&#xff1f;&#xff08;可以&#xff09; 3、以下两种写法有什么区别&#xff1f; //List list1new List();是错误的因为List()…

ZKP15.2 Formal Methods in ZK (Part I)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 15: Secure ZK Circuits via Formal Methods (Guest Lecturer: Yu Feng (UCSB & Veridise)) 15.2 Formal Methods in ZK (Part I) Circuits Workflow Source Code: Witness Generation and ConstraintsWitness Generatio…

Java零基础——SpringMVC篇

1.SpringMVC介绍 SpringMVC是Spring框架中的一个组件&#xff0c;是一个轻量级的web的MVC框架&#xff0c;充当controller,其本质就是一个Servlet。 1.1 传统Servlet的不足 每个请求&#xff0c;都需要定义一个Servlet。虽然可以在service方法中&#xff0c;根据业务标识进行…

HCIP---MPLS---LDP

文章目录 目录 文章目录 前言 一.LDP基本工作机制 LDP工作原理概述 LDP对等体&#xff1a; 二.本地LDP会话自动建立过程 三.LDP优化 PHP机制&#xff1a; 四.LDP配置 总结 前言 MPLS 基于标签转发表进行转发&#xff0c;与路由表类似&#xff0c;标签转发表有两种获取渠道&a…

【Rust】快速教程——自定义类型、数字转枚举、Cargo运行

前言 超过一定的年龄之后&#xff0c;所谓人生&#xff0c;无非是一个不断丧失的过程而已。宝贵的东西&#xff0c;会像梳子豁了齿一样从手中滑落下去。你所爱的人会一个接着一个&#xff0c;从身旁悄然消逝。——《1Q84》 \;\\\;\\\; 目录 前言自定义类型数字转枚举Cargo.tom…

【LeetCode刷题-链表】--86.分隔链表

86.分隔链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; }* }*/ class…

前端学习--React(3)

一、Redux 集中状态管理工具&#xff0c;不需要react即可使用&#xff0c;每个store的数据都是独立于组件之外的 vue小链接&#xff1a;vuex/pinia 基本使用 Redux将数据修改流程分成三个概念&#xff0c;state、action和reducer state - 一个对象 存放我们管理的数据状态 a…

某东大厂面试js手写题【手写代码附带注释,放心食用,博主亲测】

文章目录 前言js实现push方法js实现订阅发布手写防抖节流手写reduce方法深拷贝es5去重数组多维数组去重排序简单递归实现树形结构输出遍历后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;前端面试 &#x1f431;‍&#x1f453;博主在前…

Linux僵死进程及文件操作

1.僵死进程(僵尸进程)&#xff1a; 1.僵死进程产生的原因或者条件: 什么是僵死进程? 当子进程先于父进程结束,父进程没有获取子进程的退出码,此时子进程变成僵死进程. 简而言之,就是子进程先结束,并且父进程没有获取它的退出码; 那么僵死进程产生的原因或者条件就是:子进…

直接插入排序和希尔排序

前言 我们前面几期介绍了线性和非线性的基本数据结构。例如顺序表、链表、栈和队列、二叉树等~&#xff01;本期和接下来的几期我们来详解介绍各个排序的概念、实现以及性能分析&#xff01; 本期内容 排序的概念以及其运用 常见的排序算法 直接插入排序 希尔排序 一、排序的…

vue2项目从0搭建(三):配置环境变量及对应的webpack配置

前言 实际业务开发中,一个项目很可能会同时配置好几套环境。 比如:常规开发环境,开发测试环境,正式的测试环境,预发测试环境,客户甲的生产环境,客户乙的生产环境,通用生产环境,独立应用环境,微前端环境,大屏专用环境,移动端环境。 一女多嫁的实际业务场景,就需要我们进行多样…

安卓用SQLite数据库存储数据

什么是SQLite&#xff1f; SQLite是安卓中的轻量级内置数据库&#xff0c;不需要设置用户名和密码就可以使用。资源占用较少&#xff0c;运算速度也比较快。 SQLite支持&#xff1a;null&#xff08;空&#xff09;、integer&#xff08;整形&#xff09;、real&#xff08;小…

第29期 | GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大型语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以…

Linux篇:文件系统

一、共识原理&#xff1a; 文件文件内容文件属性 磁盘上存储文件存文件的内容&#xff08;数据块&#xff09;存文件的属性&#xff08;inode&#xff09; Linux的文件在磁盘中存储是将属性和内容分开存储的。 二、硬件简述&#xff1a; 1. 认识硬件 磁盘&#xff1a;唯一的一…

混合云案例:利用 Databend Cloud 高效加速私有 Databend 的策略与实施

背景 Databend 是一款基于对象存储的存算分离湖仓产品&#xff0c;已成为云上大数据分析中高效且低成本的首选解决方案。目前&#xff0c;Databend 在多个用户场景中得到广泛应用&#xff0c;包括&#xff1a; 新媒体行业数据分析及大屏数据展示云上 CDH 替代以减少本地磁盘和…

Deep Image Prior

深度图像先验 论文链接&#xff1a;https://sites.skoltech.ru/app/data/uploads/sites/25/2018/04/deep_image_prior.pdf 项目链接&#xff1a;https://github.com/DmitryUlyanov/deep-image-prior Abstract 深度卷积网络已经成为一种流行的图像生成和恢复工具。一般来说&a…

web:[ZJCTF 2019]NiZhuanSiWei1

题目 点进题目&#xff0c;网页显示如下&#xff0c;需要代码审计 $_GET["text"]和$_GET["file"]来获取传入的两个参数text和file。使用isset()函数来检查$text变量是否已设置并且不为null。如果设置了并且不为null&#xff0c;则执行下面的逻辑。在下面的…