element-plus中el-dialog导致props报错问题解决
1、报错信息
[Vue warn]: Extraneous non-props attributes (class) were passed to component but could not be automatically inherited because component renders fragment or text root nodes
error Unexpected mutation of “detailVisible” prop vue/no-mutating-props
2、报错场景
当我们在开发 vue3
项目搭配 element-plus
时,要使用 el-dialog
组件时,可能很多小伙伴是从 vue2 + element-ui
过来的,因此在使用的时候会将 visible
控制显示的参数通过父组件传递进来,导致上面的报错。
tips:因为
element-plus
删除了visible
属性,因此这里要用v-model
,否则会报el-dialog
组件上找不到visible
属性的错误,即:[Vue warn]: Extraneous non-props attributes (class) were passed to component but could not be automatically inherited because component renders fragment or text root nodes。
3、分析原因
因为 visible
现在用 v-model
绑定的,虽然 vue
有双向绑定 v-model
,vue
父子组件之间数据传递,仍然还是遵循单向数据流的,父组件可以向子组件传递 props
,但是子组件不能修改父组件传递来的 props
,子组件只能通过事件通知父组件进行数据更改。
因此这里如果从父组件修改 visible
的值,程序可能会判定你的 visible
属性可能在子组件修改,破坏了单向数据传递,因此会报错:error Unexpected mutation of “detailVisible” prop vue/no-mutating-props。
4、解决方案
将 visible
属性定义在子组件中,之后通过 defineExpose
这个勾子函数暴露出 open
方法,之后父组件通过 ref
调用 open
方法解决。
------ 子组件 ------
<template><el-dialog v-model="dialogVisible"><div>test</div></el-dialog>
</template><script lang="ts" setup>
import { ref } from 'vue'
const dialogVisible = ref(false)const open = () => {dialogVisible.value = true
}defineExpose({ open })
</script>
------ 父组件 ------
<template><SonDialog ref="sonRef"></SonDialog>
</template><script lang="ts" setup>
// 从vue中引入函数以方便获取当前组件的实例和上下文ctx
import { getCurrentInstance } from 'vue'
import SonDialog from './SonDialog'
// 调用函数,获取当前组件的实例proxy,这里的proxy类似于vue2中的this
const { proxy } = getCurrentInstance()
const openDialog = () => proxy.$refs['sonRef'].open()
</script>
element-plus中el-dialog导致props报错问题解决相关推荐
- stylus和stylus-loader版本过高导致编译报错问题解决办法
报错时版本 stylus:0.54.8 stylus-loader:6.1.0 解决方法: 1.检查你的版本: npm show stylus version npm show stylus-load ...
- pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错。
pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错. 默认Id名和项目名保持一致,也决定了meven名,通常出现不一致的情况是你全部复制了别人的xml文件,因此你如果要复制别 ...
- Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法
Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...
- import提升导致Fundebug报错:“请配置apikey”
摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件时,出现了"请配置apikey"的报错,这是由于imp ...
- 解决MySQL事务未提交导致死锁报错 避免死锁的方法
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xuheng8600/article/d ...
- SQL中常见的6个报错
本篇讲讲SQL中常见的一些报错,内容节选自<对比Excel,轻松学习SQL数据分析>一书. 1 表名错误 如果数据库中没有某张表,或者你在写代码的时候把表名写错了,都会导致程序找不到这张表 ...
- laravel 提交Request 请求后会莫名多出一个s参数,导致数据库报错问题的解决方法
项目场景: apache运行laravel框架开发的系统. 问题描述: 提交post或者其他请求,会在request中存在s参数,导致数据库报错. 原因分析: apache的.htaccess文件中的 ...
- fundebug php,import提升导致Fundebug报错的解决方法(详细)
本篇文章给大家带来的内容是关于import提升导致Fundebug报错的解决方法(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 摘要: 解释一下"请配置apikey ...
- import提升导致Fundebug报错:“请配置apikey” 1
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件 ...
最新文章
- GitLab首席执行官Sid Sijbrandij畅谈当前开发实践
- ListFragment的使用
- Android 大牛开发者博客列表
- 传说中的WCF:消息拦截与篡改
- Can you raed it croretcly?
- Java获取系统文件类型图标并显示在JSP上
- java swftools linux_swftools linux下安装
- Windows XP和Windows 7双系统安装和启动菜单修复
- 数据中台、数据仓库和数据湖传统的区别
- linux下mysql数据库基础及客户端命令详解
- 15.6. Plugin Hook 设计与实现
- 实验一 白盒测试用例设计
- python怎么用拼音-用Python写一个拼音输入法
- 快递单号快速查询,自动识别快递公司
- 【Java】使用AOP进行异常处理与日志记录
- 恼人的Windows 10语言栏设置
- 关于校园流浪猫狗的调查报告 新生研讨课校内调查
- 电脑打开excel文件的方式没有excel程序
- c语言记账,C语言会计记账管理系统.doc
- Validator框架的使用
热门文章
- 或许,大家知道小黄鸡是一个机器人之后,会很失望。但是,这似乎也说明了,能随叫随到陪你聊天的人,或许是不存在的...
- 车载行车记录仪EMC浪涌防护方案图
- EMV技术学习和研究(三)应用初始化读应用数据
- 介绍主密钥,传输秘钥,工作秘钥
- 数据库(Mysql)学习
- 超链接标签 a (锚点链接)
- 同步电机仿真永磁同步电机 弱磁控制 simulink仿真模型 凸极电机
- 番茄编程助手_如何使用番茄法高效的写算法题?
- bool 和_Bool , bool _Bool
- php fpm的pool,php-fpm的pool、PHP慢执行日志、open_basedir、php-fpm进程管理