🌟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…