对el-dialog进行封装 未理清逻辑,造成直接修改prop

控制台报警告:

Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop's value. 
# 翻译:避免直接改变 prop,因为每当父组件重新渲染时,值都会被覆盖。 相反,根据prop的值使用数据或计算属性。 

这里我并没有改变prop,问题出在底层的封装的dialog

<el-dialog
  :visible.sync="xxxVisible"
>

.sync 修饰符,是个不错的语法糖;用更少的代码,实现了子组件emit,父组件做赋值更新的操作
所以
我在封装时,也借鉴了这个思路

<my-dialog :xxx-visible.sync="xxxxVisible">

这里我为了能在父级操作visible相对于是一层层传递
问题就出在visible.sync,它可以修改xxxVIsible,也就是组件的 prop
实际出问题的场景:
当点击对话框右上方关闭图标时,xxxVIsible 会被直接修改

解决办法

删除掉 dialog 上的 sync 修饰符,这样 关闭图标会失效
根据 sync 修饰符 原理 添加 监听 并将事件向上层emit

@update:visible="value => $emit('update:xxxxVisible', value)"

还可以不去除sync 用 data 来承接 prop
然后监听 data 变化,然后 emit

posted @   海胆Sur  阅读(32)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示