7个 Vue 3 中的组件通信方式

7个 Vue 3 中的组件通信方式_第1张图片

来源 | https://javascript.plainenglish.io/7-component-communications-in-vue-3-f4d2d795481d

翻译 | 杨小爱

写在前面

本文采用

子组件只需要渲染父组件传递的值。

代码如下:


2、Emit

Emit也是Vue中最常见的组件通信方式,用于子组件向父组件传递消息。

我们在父组件中定义列表,子组件只需要传递添加的值。

子组件代码如下:


点击子组件中的【添加】按钮后,我们会发出一个自定义事件,并将添加的值作为参数传递给父组件。

父组件代码如下:


在父组件中,只需要监听子组件的自定义事件,然后执行相应的添加逻辑即可。

3、v-model 

v-model 是 Vue 中一个优秀的语法糖,比如下面的代码。

这是以下代码的简写形式

这确实容易了很多。现在我们将使用 v-model 来实现上面的示例。

子组件


在子组件中,我们先定义props和emits,添加完成后再发出指定的事件。

注意:update:*是Vue中固定的写法,*代表props中的一个属性名。

在父组件中使用比较简单,代码如下:


4、Refs

使用API选项时,我们可以通过this.$refs.name获取指定的元素或组件,但在组合API中不行。如果我们想通过ref获取,需要定义一个同名的Ref对象,在组件挂载后可以访问。

示例代码如下:


子组件代码如下:


注意:默认情况下,setup 组件是关闭的,通过模板 ref 获取组件的公共实例。如果需要公开,需要通过defineExpose API 公开。

5、provide/inject

provide/inject是 Vue 中提供的一对 API。无论层级多深,API 都可以实现父组件到子组件的数据传递。

示例代码如下所示:

父组件


子组件


注意:使用 provide 进行数据传输时,尽量使用 readonly 封装数据,避免子组件修改父组件传递的数据。

6、eventBus

Vue 3 中移除了 eventBus,但可以借助第三方工具来完成。Vue 官方推荐使用 mitt 或 tiny-emitter。

在大多数情况下,不建议使用全局事件总线来实现组件通信。虽然比较简单粗暴,但是维护事件总线从长远来看是个大问题,这里就不解释了。有关详细信息,您可以阅读特定工具的文档。

7、vuex/pinia

Vuex 和 Pinia 是 Vue 3 中的状态管理工具,使用这两个工具可以轻松实现组件通信。由于这两个工具都比较强大,这里就不一一展示了。有关详细信息,请参阅文档。

最后

今天内容到这里就结束了,如果你觉得有帮助的话,请记得分享给你身边做开发的朋友,如果你觉得有用的话,记得点赞我,关注我。

最后感谢你的阅读,祝工作愉快!

学习更多技能

请点击下方公众号

7个 Vue 3 中的组件通信方式_第3张图片

bb06b26c053d3cd5ba56737ab9c8af7b.png

7个 Vue 3 中的组件通信方式_第4张图片

你可能感兴趣的:(java,python,vue,javascript,html)