Vue 3 + Element Plus 常見開發問題與解決方案手冊

🌟Vue 3 + Element Plus 常見開發問題與解決方案手冊

🧠 本文整理了常見但容易混淆的幾個 Vue 3 前端開發問題,包括插槽、原型鏈、響應式數據處理、v-model 報錯、樣式陰影控制等,建議收藏學習!


📌一、動態插槽 fallback 原理詳解

? 場景

在組件中使用如下代碼:

<slot :name="item.prop"><component:is="getComponentType(item.type)"v-model="formModel[item.prop]"v-bind="getComponentProps(item)"clearablestyle="width: 100%"/>
</slot>

? 疑問

為什么加了 <slot :name="xxx">默認內容</slot>,父組件傳了插槽就會生效,沒傳就自動使用默認內容?

? 解答

這是 Vue 插槽的 fallback(回退)機制:

  • 父組件有傳 <template #xxx> 插槽,就渲染插槽內容;
  • 沒傳,就渲染 <slot> 標簽中的默認內容。

? 示例

子組件

<slot name="gender"><el-input v-model="formModel.gender" />
</slot>

父組件 A(沒傳插槽)

<ChildComponent />

?? 渲染默認 <el-input />

父組件 B(傳了插槽)

<ChildComponent><template #gender><el-radio-group v-model="formModel.gender"><el-radio label="male">男</el-radio><el-radio label="female">女</el-radio></el-radio-group></template>
</ChildComponent>

?? 渲染插槽內容


📌二、h() 函數參數說明

h(type, props?, children?)
參數含義
type標簽名或組件(字符串、對象)
propsclass、style、事件、props
children字符串、VNode數組、插槽函數等

? 示例

h('div', { class: 'box' }, 'Hello') // <div class="box">Hello</div>
h(MyComponent, { propA: 1 }, { default: () => h('span', '插槽內容') })

📌三、為什么 unref() 不能去掉 Proxy?

function handleSearch() {emit('search', unref(props.queryParams))
}

? 疑問

打印結果為什么還是 Proxy?

? 解答

  • unref() 只能解包 ref() 類型
  • reactive() 返回的是 Proxy,不會被 unref() 解包
  • 所以 unref(reactiveObj) 仍然是 Proxy

? 正確做法

方式一:toRaw()(淺解包)
import { toRaw } from 'vue'
emit('search', toRaw(props.queryParams))
方式二:cloneDeep()(推薦,深拷貝)
import cloneDeep from 'lodash-es/cloneDeep'
emit('search', cloneDeep(props.queryParams))

📌四、toRaw vs unref 的區別

方法用途解包對象是否保留響應式
unref()取出 ref 的 .value只能 ref是(ref.value 仍可能是 reactive)
toRaw()獲取原始對象(去 Proxy)只能 reactive

📌五、原型鏈到底有幾層?

? 答案:沒有固定層數,直到原型為 null 為止。

? 示例

const obj = {}
Object.getPrototypeOf(obj)          // → Object.prototype
Object.getPrototypeOf(Object.prototype) // → null ?
類型原型鏈結構
對象 {}obj → Object.prototype → null
數組 []→ Array.prototype → Object.prototype → null
函數 function () {}→ Function.prototype → Object.prototype → null

📌六、v-model 報錯:v-model cannot be used on a prop

? 報錯場景

在組件中這樣寫:

<el-input v-model="modelValue" />

modelValuedefineProps() 得到的 prop,Vue 提示該屬性是只讀的!

? 正確做法(支持 v-model

<el-input:model-value="modelValue"@input="val => emit('update:modelValue', val)"
/>

? setup 完整寫法

const props = defineProps(['modelValue'])
const emit = defineEmits(['update:modelValue'])

📌七、如何讓 box-shadow 去掉右邊?

原始樣式(四邊陰影):

box-shadow: 0 0 0 1px var(--el-input-border-color) inset;

? 改成只保留左上右:

box-shadow:inset 1px 0 0 var(--el-input-border-color),   /* 左 */inset 0 1px 0 var(--el-input-border-color),   /* 上 */inset 0 -1px 0 var(--el-input-border-color);  /* 下 */

👉 不寫右邊的就相當于去掉右側邊框效果。


📌附錄:使用 Element Plus 時注意

  • 所有輸入類組件(如 el-input、el-select)都使用 modelValue 作為 v-model 的綁定值;
  • 插槽使用 fallback 內容時,記得 slot name 要和父組件一致;
  • 使用樣式定制時,Element Plus 常用的 CSS 變量有:
    --el-input-border-color--el-border-color--el-color-primary 等。

? 推薦工具函數(Bonus)

你可以封裝一個自動脫 Proxy 工具:

import { toRaw, isRef, unref } from 'vue'
import cloneDeep from 'lodash-es/cloneDeep'export function cleanReactive(val: any) {if (isRef(val)) return unref(val)if (val && val.__v_isReactive) return cloneDeep(toRaw(val))return val
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87551.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87551.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87551.shtml

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

相關文章

Spring Boot + 本地部署大模型實現:安全性與可靠性保障

在將大語言模型集成到 Spring Boot 應用中時&#xff0c;安全性和可靠性是兩個關鍵因素。本地部署的大模型雖然提供了強大的功能&#xff0c;但也可能帶來一些安全風險&#xff0c;如數據泄露、模型被惡意利用等。本文將介紹如何在 Spring Boot 應用中保障本地部署大模型的安全…

Zookeeper 客戶端 .net訪問框架 ZookeeperNetEx項目開發編譯

一、項目簡介 ZooKeeperNetEx 項目是一個針對.NET開發的異步客戶端庫&#xff0c;旨在為開發者提供高效且可靠的分布式協調服務。? 該項目完全基于任務異步編程&#xff0c;兼容.NET 4.61及以上版本&#xff0c;包括.NET Core。ZooKeeperNetEx嚴格遵循官方Java客戶端的邏輯&am…

【學習筆記】因果推理導論第2課

因果推理導論第2課 因果推斷假設 前言一、假設1、 Ignorability / Exchangeability2、條件可交換 二、估計 前言 第一節課通過一些例子說明了為什么要做因果推斷,以及通過控制混雜因素計算因果效應;這一節課將圍繞為何控制混雜因素計算因果效應這一方法成立,講述其涉及到的一些…

VASP 教程:VASP 機器學習力場微調

機器學習力場&#xff08;Machine-Learned Force Fields, MLFFs&#xff09;作為一種新興的計算方法&#xff0c;已在第一性原理分子動力學&#xff08;Ab Initio Molecular Dynamics, AIMD&#xff09;模擬中展現出獨特優勢&#xff08;參見 VASP Wiki&#xff1a;Category:Ma…

Java+Vue開發的倉庫管理系統,實時監控庫存,精準統籌貨物出入與調配

前言&#xff1a; 在當今競爭激烈的商業環境中&#xff0c;高效的倉庫管理對于企業的運營和成本控制至關重要。一個完善的倉庫管理系統能夠幫助企業實現貨物的精準存儲、快速出入庫、實時庫存監控以及全面的數據分析&#xff0c;從而提升整體運營效率、降低庫存成本、增強客戶…

【王陽明代數】熱門問答,什么是張量?

【王陽明代數】熱門問答&#xff0c;什么是張量&#xff1f; 流形學習基礎概念前情提要&#xff0c;張量概念的提出&#xff0c;王船山流形與信息容量的概念回答&#xff1a;什么是張量前&#xff0c;對王船山流形&#xff0c;意氣實體的定義再表述&#xff1b;王船山流形分析1…

差分壓縮算法(增量更新)

差分壓縮算法是一種數據壓縮技術&#xff0c;它的核心思想是通過找出數據之間的差異來減少需要存儲或傳輸的數據量。下面從基本原理、常見應用場景、算法示例等方面詳細介紹差分壓縮算法。 基本原理 差分壓縮算法的基本原理是比較相鄰數據元素之間的差異&#xff0c;并只記錄…

Html5支持的視頻文件格式和音頻文件格式有哪些?

視頻文件格式 MP4&#xff1a;MPEG-4 Part 14&#xff0c;支持H.264編碼。幾乎所有的瀏覽器都支持該格式。 WebM&#xff1a;谷歌開發的格式&#xff0c;使用VP8或VP9編碼&#xff0c;可以在大多數現代瀏覽器中播放 Ogg&#xff1a;開放媒體格式&#xff0c;使用Vorbis編碼&…

J20250704 算法題5道

題目一覽&#xff1a; 606. 根據二叉樹創建字符串 - 力扣&#xff08;LeetCode&#xff09; 506. 相對名次 - 力扣&#xff08;LeetCode&#xff09; 1. 兩數之和 - 力扣&#xff08;LeetCode&#xff09; 100. 相同的樹 - 力扣&#xff08;LeetCode&#xff09; 101. 對稱…

UNet改進(15):分組注意力機制在UNet中的應用探索

引言 注意力機制已成為現代深度學習架構中不可或缺的組成部分,特別是在計算機視覺領域。近年來,各種注意力機制的變體被提出,以解決不同場景下的特定問題。本文將深入探討一種稱為分組注意力(Grouped Attention)的機制,以及它如何被集成到經典的UNet架構中,從而提升模型在…

C++之路:類基礎、構造析構、拷貝構造函數

目錄 前言從結構體到類類的聲明與使用基礎聲明繼承聲明數據與函數聲明與調用聲明調用 類的訪問修飾符類對象的內存分布類內數據相關靜態變量非靜態變量 類成員函數相關普通成員函數友元函數構造與析構函數構造函數析構函數 拷貝構造函數總結 前言 面向對象編程有三大特性&#…

黑神話悟空游戲輿情分析

完整項目包點擊文末名片 黑神話悟空上線初期輿情分析 背景 《黑神話&#xff1a;悟空》在上線首日便創下了全球游戲行業的多項新紀錄&#xff0c;包括Steam同時在線人數超過222萬&#xff0c;全渠道總銷量超過450萬份&#xff0c;總銷售額超過15億元。本項目旨在對 3A 游戲《黑…

python的or-tools算法踩坑

debug模式代碼好的,然后正常運行不行(用的PyCharm) 不知道為什么debug模式這個可以的,但是正常模式不行 用or-tools算路徑的時候 因為要多次到達同一個點,但是or-tools不支持,所以弄了虛擬點和真實點的距離是0,但是實際上如果虛擬點到真實點為0的話or-tools結果秒出,但是實…

docker-compose一鍵部署全棧項目。springboot后端,react前端

部署總覽前端打包: 我們將配置 package.json&#xff0c;使用 npm run build (內部調用 vite build) 來打包。這個過程將完全在 Docker 構建鏡像的過程中自動完成&#xff0c;你的主機上甚至不需要安裝 Node.js。后端打包: 我們將配置 pom.xml&#xff0c;使用 mvn clean packa…

MCMC:高維概率采樣的“隨機游走”藝術

MCMC&#xff08;馬爾可夫鏈蒙特卡洛&#xff09; 是一種從復雜概率分布中高效采樣的核心算法&#xff0c;它解決了傳統采樣方法在高維空間中的“維度災難”問題。以下是其技術本質、關鍵算法及實踐的深度解析&#xff1a; 本文由「大千AI助手」原創發布&#xff0c;專注用真話…

HarmonyOS免密認證方案 助力應用登錄安全升級

6月21日&#xff0c;2025年華為開發者大會"安全與隱私分論壇"在松山湖順利舉辦。本論壇聚焦App治理與監管、星盾安全2.0的核心能力等進行深度分享與探討。其中&#xff0c;HarmonyOS Passkey免密認證方案作為安全技術創新成果備受矚目。該方案基于FIDO協議實現&#…

flutter flutter_vlc_player播放視頻設置循環播放失效、初始化后獲取不到視頻寬高

插件&#xff1a;flutter_vlc_player: ^7.4.3 問題1&#xff1a;設置循環播放_controller.setLooping(true);無用。 解決方法&#xff1a; //vlcPlayer設置循環播放失效&#xff0c;以這種方式失效循環播放 _setLoopListener() async {if (_videoController!.value.hasError…

React與Vue的主要區別

React和Vue都是當今最流行、最強大的前端Javascript框架&#xff0c;它們都能構建出色的單頁面應用。 以下是React和Vue的主要區別&#xff1a; React&#xff1a; React官方自稱是一個用于構建用戶界面的JavaScript庫&#xff08;尤其是UI組件&#xff09;。它專注于視圖層。…

瀏覽器原生控件上傳PDF導致hash值不同

用戶要求對上傳的pdf計算hash排重&#xff0c;上線后發現排重失敗 1、postman直接調用接口沒有發現問題&#xff0c;每次獲取的hash值是一樣的 2、apifox網頁版&#xff0c;調用接口發現問題&#xff0c;清除緩存后&#xff08;將選擇的文件刪除重新選擇&#xff09;&#xf…