vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue用ref还是props

在Vue项目里管理弹窗组件是用ref还是用props详解

作者:褪色的笔记簿

Vue提供了许多高级特性来增强组件开发的能力,下面这篇文章主要介绍了在Vue项目里管理弹窗组件是用ref还是用props的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

在 Vue 项目里管理弹窗组件:用 ref 还是用 props?

在做业务后台时,页面上常常会有很多弹窗:新增、编辑、详情、排班表……这些弹窗如果直接写在页面里,很快就会把父组件挤爆,于是我们会想到“抽成子组件”。但这时往往会遇到一个问题:父组件到底该用 ref 调子组件方法,还是用 props + 事件 来控制子组件?这篇文章就围绕这个问题,把我们刚才讨论过的内容系统梳理一下。

两种常见的控制方式

1. 用 props + 事件 控制子组件(推荐)

思路:

父组件负责的状态(示例):

子组件负责的状态:

优点:

可以把这种模式理解为:> 父组件不“命令”子组件做事,而是“给它数据 + 监听它发出的事件”。

2. 用 $refs.xxx.xxx() 直接调用子组件方法

思路:

父组件负责的内容:

子组件负责的内容:

优点:

缺点:

Vue 3 迁移视角下的比较

如果你将来准备把项目慢慢升级到 Vue 3,或者用 Composition API / 

props + 事件 在 Vue 3 的表现

核心思想不变,只是“换一层语法皮”。这意味着:今天用 props + 事件 管子组件,将来改 Vue 3 时,不用推翻设计,只是重写语法。

$refs 调子组件方法在 Vue 3 的表现

也就是说:这种以 $refs 为中心的方式,在 Vue 3 里不能说用不了,但和新的组合式风格有点“别扭”,迁移时需要额外适配。

当页面上有“很多弹窗”时该怎么设计

现实业务中,一个页面上可能有:

如果所有弹窗的表单、校验、loading、内部状态,统统塞到父组件的 data 里,父组件会非常臃肿,而且很多状态和“列表主流程”并没有直接关系。一个比较健康的拆分策略是:

父组件只维护“与业务流程相关的最小状态”

例如:

所有这些数据都直接体现“页面业务流程”:比如“我要新增一个班组”,“我要编辑这行班组”,“我要查看这个班组的排班表”。

子组件维护“弹窗内部的一切细节”

例如:

这样,即使页面上有很多弹窗:

无论你最终选择 props + 事件 还是 $refs,这个拆分边界是更重要的设计点。

什么时候更适合用 props + 事件

可以优先选用这一套的场景:

总结成一句话:> 只要不是非常临时的一次性组件,props + 事件 一般都是更稳妥的首选方案。

什么时候 $refs 也可以接受

尽管不推荐作为默认选择,但在一些情况下,$refs 也是可以使用的:

哪怕如此,也建议:

总结:实际项目里的推荐组合

综合上面所有点,可以给出一个比较落地的建议组合:

如果你现在正在重构一个老页面、抽离一堆弹窗组件,一个实用的操作顺序是:

  1. 先尽量用 props + 事件 把复杂表单弹窗都抽出去。
  1. 只有在确实“很不方便”时,再为某个子组件补一个 open() 形式的 API,配合 $refs 使用。

这样既能兼顾当前开发效率,也不会把未来的维护成本提前埋雷。

总结

到此这篇关于在Vue项目里管理弹窗组件是用ref还是用props的文章就介绍到这了,更多相关Vue用ref还是props内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文