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-modelvue 父子组件之间数据传递,仍然还是遵循单向数据流的,父组件可以向子组件传递 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报错问题解决相关推荐

  1. stylus和stylus-loader版本过高导致编译报错问题解决办法

    报错时版本 stylus:0.54.8 stylus-loader:6.1.0 解决方法: 1.检查你的版本: npm show stylus version npm show stylus-load ...

  2. pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错。

    pom.xml中的artifactId标签与工程名不对应,可能会导致运行报错. 默认Id名和项目名保持一致,也决定了meven名,通常出现不一致的情况是你全部复制了别人的xml文件,因此你如果要复制别 ...

  3. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法

    Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法. 一个Java老项目,更新了日志工具,升级为Log4j2,在引入log4j-api-2.14.0.jar 和log4j-core-2. ...

  4. import提升导致Fundebug报错:“请配置apikey”

    摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件时,出现了"请配置apikey"的报错,这是由于imp ...

  5. 解决MySQL事务未提交导致死锁报错 避免死锁的方法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/xuheng8600/article/d ...

  6. SQL中常见的6个报错

    本篇讲讲SQL中常见的一些报错,内容节选自<对比Excel,轻松学习SQL数据分析>一书. 1 表名错误 如果数据库中没有某张表,或者你在写代码的时候把表名写错了,都会导致程序找不到这张表 ...

  7. laravel 提交Request 请求后会莫名多出一个s参数,导致数据库报错问题的解决方法

    项目场景: apache运行laravel框架开发的系统. 问题描述: 提交post或者其他请求,会在request中存在s参数,导致数据库报错. 原因分析: apache的.htaccess文件中的 ...

  8. fundebug php,import提升导致Fundebug报错的解决方法(详细)

    本篇文章给大家带来的内容是关于import提升导致Fundebug报错的解决方法(详细),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 摘要: 解释一下"请配置apikey ...

  9. import提升导致Fundebug报错:“请配置apikey” 1

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 解释一下"请配置apikey"报错的原因. 部分Fundebug用户使用import来导入js文件 ...

最新文章

  1. GitLab首席执行官Sid Sijbrandij畅谈当前开发实践
  2. ListFragment的使用
  3. Android 大牛开发者博客列表
  4. 传说中的WCF:消息拦截与篡改
  5. Can you raed it croretcly?
  6. Java获取系统文件类型图标并显示在JSP上
  7. java swftools linux_swftools linux下安装
  8. Windows XP和Windows 7双系统安装和启动菜单修复
  9. 数据中台、数据仓库和数据湖传统的区别
  10. linux下mysql数据库基础及客户端命令详解
  11. 15.6. Plugin Hook 设计与实现
  12. 实验一 白盒测试用例设计
  13. python怎么用拼音-用Python写一个拼音输入法
  14. 快递单号快速查询,自动识别快递公司
  15. 【Java】使用AOP进行异常处理与日志记录
  16. 恼人的Windows 10语言栏设置
  17. 关于校园流浪猫狗的调查报告 新生研讨课校内调查
  18. 电脑打开excel文件的方式没有excel程序
  19. c语言记账,C语言会计记账管理系统.doc
  20. Validator框架的使用

热门文章

  1. 或许,大家知道小黄鸡是一个机器人之后,会很失望。但是,这似乎也说明了,能随叫随到陪你聊天的人,或许是不存在的...
  2. 车载行车记录仪EMC浪涌防护方案图
  3. EMV技术学习和研究(三)应用初始化读应用数据
  4. 介绍主密钥,传输秘钥,工作秘钥
  5. 数据库(Mysql)学习
  6. 超链接标签 a (锚点链接)
  7. 同步电机仿真永磁同步电机 弱磁控制 simulink仿真模型 凸极电机
  8. 番茄编程助手_如何使用番茄法高效的写算法题?
  9. bool 和_Bool , bool _Bool
  10. php fpm的pool,php-fpm的pool、PHP慢执行日志、open_basedir、php-fpm进程管理