前端 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.pswp.cn/news/165241.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165241.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165241.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

預處理機制

跟著肯哥&#xff08;不是我&#xff09;學預處理機制 預處理類別 宏定義&#xff1a;#define 將文本替換為表達式或語句 條件編譯&#xff1a;#ifdef、#ifndef和#if、#elif、#endif 根據標識符是否被定義選擇編譯代碼 頭文件包含&#xff1a;#include 將其他文件&#x…

Jmeter怎么實現接口關聯?

用于接口測試時&#xff0c;后一個接口經常需要用到前一次接口返回的結果&#xff0c;應該如何獲取前一次請求的結果值&#xff0c;應用于后一個接口呢&#xff0c;拿一個登錄的例子來說明如何獲取。 1、打開jmeter&#xff0c;新建一個測試計劃&#xff0c;在測試計劃里新建一…

將所有圖片居中對齊

Ctrl h 調出替換框 ^g表示所有圖片 格式里面選擇段落 全部替換

winlogbeat采集windows日志

下載鏈接 https://www.elastic.co/cn/downloads/past-releases/winlogbeat-7-16-2 配置文件 # ---------------------------- Elasticsearch Output ---------------------------- output.elasticsearch:# Array of hosts to connect to.hosts: ["192.168.227.160:9200&…

Vue3中如何響應式解構 props

目錄 1&#xff0c;前言2&#xff0c;解決2.1&#xff0c;利用插件&#xff0c;實現編譯時轉換2.2&#xff0c;toRef 和 toRefs 1&#xff0c;前言 Vue3 中為了保持響應性&#xff0c;始終需要以 props.x 的方式訪問這些 prop。這意味著不能夠解構 defineProps 的返回值&#…

Navicat 技術指引 | 適用于 GaussDB 的數據遷移工具

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持對 GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構同步、協同合作、數據遷移等&#xff09;&#xff0c;這…

Cesium 展示——地球以及渲染數據導出(下載)為圖片或 pdf

文章目錄 需求分析新加需求分析第一種方式第二種方式需求 將 Cesium 球體以及渲染數據導出為 jpg/png/pdf 分析 獲取場景 scene 信息,轉為image 的 octet-stream 流 進行下載為圖片 /*** @todo canvas 導出圖片* @param {string} dataurl - 地址* @return {Blob}*/ functio…

Failed to resolve import “@/..“ from “src/...“ @找不到路徑

安裝path npm install --save-dev types/node再修改 vite.config.ts 中的配置即可 import { defineConfig } from "vite" import react from "vitejs/plugin-react"import path from "path" // 需安裝此模塊// https://vitejs.dev/config/ expo…

設備健康管理平臺助力鋰電企業實現可持續發展

隨著鋰電池產業的快速發展&#xff0c;設備的穩定運行和精準維護對于鋰電企業來說至關重要。傳統的設備維護方式在效率和全面性方面存在局限&#xff0c;無法滿足鋰電行業對設備管理的需求。然而&#xff0c;通過設備健康管理平臺的引入&#xff0c;鋰電企業現在可以充分發揮其…

XSLVGL2.0 User Manual 頁面管理器(v2.0)

XSLVGL2.0 開發手冊 XSLVGL2.0 User Manual 頁面管理器 1、概述2、特性3、APIs3.1、xs_page_init3.2、xs_page_wait_inited3.3、xs_page_exit3.4、xs_page_acquire3.5、xs_page_release3.6、xs_page_set_bootlogo3.7、xs_page_setup_clear_finish3.8、xs_page_setup_is_finish…

【LeetCode:1410. HTML 實體解析器 | 模擬+哈希表+字符串+庫函數】

&#x1f680; 算法題 &#x1f680; &#x1f332; 算法刷題專欄 | 面試必備算法 | 面試高頻算法 &#x1f340; &#x1f332; 越難的東西,越要努力堅持&#xff0c;因為它具有很高的價值&#xff0c;算法就是這樣? &#x1f332; 作者簡介&#xff1a;碩風和煒&#xff0c;…

【C語言】中,輸入一個數組,實現將輸入的n個數字按照從大到小的順序輸出。【通俗簡單易懂】

本篇文章中&#xff0c;我們將講述在C語言中&#xff0c;輸入一個數組&#xff0c;如何用for循環實現將輸入的n個數字按照從大到小輸出。 一.定義數組并初始化 首先&#xff0c;我們定義一個整形的數組并將其初始化。輸入n&#xff0c;來決定數組中整數的個數。 然后用for循…

通過HTML網頁對mysql數據庫進行增刪改查(CRUD實例)

首先我們得了解一下大致的架構 ,如下: 我們采用自底向上的方式進行開發, 一、先寫mysql數據庫 二、再寫java后端(Spring MVC架構)(這個是什么東西不懂不要緊,跟著步驟做就行了) 三、最后寫前端頁面(HTML) 一、 Mysql數據庫部分 我們要通過網頁對數據庫進行開發&#xff0c;…

解決:Gitee + PicGo配置圖床失敗

解決&#xff1a;Gitee PicGo配置圖床失敗 PicGo安裝插件的時候選擇&#xff1a;gitee-uploader&#xff0c;不要選擇gitee&#xff01; 在Gitee新建的圖床倉庫中設置一個images文件夾&#xff0c;用來保存上傳的圖片&#xff0c;但是要注意在PicGo中的path中要寫上路徑/img…

數據庫基礎入門 — SQL運算符

我是南城余&#xff01;阿里云開發者平臺專家博士證書獲得者&#xff01; 歡迎關注我的博客&#xff01;一同成長&#xff01; 一名從事運維開發的worker&#xff0c;記錄分享學習。 專注于AI&#xff0c;運維開發&#xff0c;windows Linux 系統領域的分享&#xff01; 本…

linux的基礎命令

文章目錄 linux的基礎命令一、linux的目錄結構&#xff08;一&#xff09;Linux路徑的描述方式 二、Linux命令入門&#xff08;一&#xff09;Linux命令基礎格式 三、ls命令&#xff08;一&#xff09;HOME目錄和工作目錄&#xff08;二&#xff09;ls命令的參數1.ls命令的-a選…

基于yolov2深度學習網絡的喝水行為檢測系統matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1、YOLOv2網絡原理 4.2、基于YOLOv2的喝水行為檢測 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off;…

PPT思維導圖怎么做?這2個思維導圖工具墻裂推薦!

在日常學習和工作中&#xff0c;我們常常會面臨需要處理大量信息的情況&#xff0c;這時候&#xff0c;一種叫做思維導圖的工具可能會成為你的救星。 不同于傳統的線性記錄方式&#xff0c;思維導圖以其獨特的視覺表現力和結構化的信息處理方式&#xff0c;使得人們能夠更加有…

Flutter學習(四)如何取消listview的越界效果

背景 在flutter的開發過程中&#xff0c;ListView是很常見的一個組件&#xff0c;但是&#xff0c;由于ListView的某些自帶的體驗&#xff0c;導致不太好的用戶體驗。例如ListView中&#xff0c;滑動到頂部或者底部的時候&#xff0c;再次滑動&#xff0c;會有越界的效果&…

同步和異步

同步和異步是處理任務時的兩種不同方式。 同步是指一個進程在執行某個請求的時候&#xff0c;如果該請求需要一段時間才能返回信息&#xff0c;那么這個進程會一直等待下去&#xff0c;直到收到返回信息才繼續執行下去。這種方式下&#xff0c;任務是按照順序一個一個執行的&am…