对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
内容会不断更新,欢迎批评指正。

浙公网安备 33010602011771号