全国免费咨询:

13245491521

VR图标白色 VR图标黑色
X

中高端软件定制开发服务商

与我们取得联系

13245491521     13245491521

2024-03-13_vue3项目同事用 provide+ref 组件实例进行跨组件通信 ,给我看傻了

您的位置:首页 >> 新闻 >> 行业资讯

vue3项目同事用 provide+ref 组件实例进行跨组件通信 ,给我看傻了 前言 平常 你在开发过程中是不是经常会遇到这种场景: 一个页面共有多个区域, 头部区域和中间区域是兄弟组件 头部区域有一个 按钮 会修改 中间部分的内容 正常解决方案 正常我们的解决方案 无非就是 props搭配emit 或者bus 总线:mitt 或者 子组件emit出去父组件用ref获取组件实例去改参数等等,但是我同事不一样 后面会叙述 props+ emit父组件 Header 组件 Content 组件 这个应该是平常我们用的比较多的方式对吧 1)将 title变量提升到 父组件2)header组件将事件emit 出去 在父组件中修改 title 的值emit + ref省略 在header 中 点击事件中 emit 出去 在父组件利用 ref 获取 content 组件中的 实例 然后直接修改 title内容 mitt这里就省略了 无非是借用了 mitt 的emit 事件 和 on 事件 发布订阅 进行修改数据 或者你还有其他的方案 我觉得 应该也是大差不差 主要看下面的方式 我同事的方案 重点到了 我看了同事的方案是 provide + inject + ref 实例的方式 父组件 Header 组件 Content 组件 他的思路是 利用provide 在父组件中 获取所有子组件的实例利用 inject 将所有的子组件实例注入到所有的 给自的子组件中这样 就可以直接 利用注入的provideRefs 获取到其他ref实例 就可以直接去修改 对应组件中的参数 或者调用 内部的方法但是得注意 你必须要在子组件defineExpose 抛出你要修改的参数 或者 方法这样其他组件才能调用到我看了之后 直呼一声: 总结 这种思路确实比较清奇 ,如果在 组件比较多、比较复杂的时候 ,跨组件通信 确实是比较麻烦的,你得写很多代码 各种 emit 各种 props 然后状态在父组件中 修改之后 同步到子组件中,举个例子: 场景一:要是 header组件 按钮得调用 content的 刷新表格的方法的话 你八成得: 1、在父组件中 弄一个 fetchTableFlag 变量 传递到content 组件中 2、在header组件中 点击按钮的时候 emit 到父组件 去修改fetchTableFlag 的值 3、在 Content 组件中watch fetchTableFlag 的变化然后调用 刷新表格的方法 这样的交互多了话 可能就会导致会有很多变量 导致代码量增加 利用他的方法的话 某种程度上说确实 减少了不少代码 场景二:如果组件有很多 不仅仅是这三种组件 比如 爷孙组件通信 或者兄弟组件有五六个的时候 你可能会考虑使用 pinia 但是 他们其实并没有多少的公用参数 可能只是这个组件改变了一下另一个组件的状态 给人感觉是不是放到 pinia 里面会比较重,用他的这种方式的话 就 就把传参扁平化了 但是我个人觉得这种方式,还是不推荐使用,因为他打破了vue 的单项数据流的规,导致数据流转不清晰,可是vue 既然创造了provide 和 ref 实例进行传参,那么自然有他存在的道理,我们同事之间对这种方式褒贬不一,jym 你们觉得呢? 阅读原文

上一篇:2017-10-26_MindTalk深圳 | 宇宙网红“熊本熊”之父水野学:现代企业设计力 下一篇:2021-07-02_这个知道吉卜力最多秘密的男人,又出书了|未知商店

TAG标签:

19
网站开发网络凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设网站改版域名注册主机空间手机网站建设网站备案等方面的需求...
请立即点击咨询我们或拨打咨询热线:13245491521 13245491521 ,我们会详细为你一一解答你心中的疑难。
项目经理在线

相关阅读 更多>>

猜您喜欢更多>>

我们已经准备好了,你呢?
2022我们与您携手共赢,为您的企业营销保驾护航!

不达标就退款

高性价比建站

免费网站代备案

1对1原创设计服务

7×24小时售后支持

 

全国免费咨询:

13245491521

业务咨询:13245491521 / 13245491521

节假值班:13245491521()

联系地址:

Copyright © 2019-2025      ICP备案:沪ICP备19027192号-6 法律顾问:律师XXX支持

在线
客服

技术在线服务时间:9:00-20:00

在网站开发,您对接的直接是技术员,而非客服传话!

电话
咨询

13245491521
7*24小时客服热线

13245491521
项目经理手机

微信
咨询

加微信获取报价