您现在的位置是:网站首页> 编程资料编程资料
老生常谈vue3组件通信方式_vue.js_
2023-05-24
605人已围观
简介 老生常谈vue3组件通信方式_vue.js_
vue3七种组件通信方式
面试题经常会问到vue3组件间的通信方式,下文列举了七种常见的通信方式。
- props
- emit
- v-model
- refs
- provide/inject
- eventBus
- Vuex4/pinia(vuex5)
1. Props方式
父组件以数据绑定的形式声明要传递的数据,子组件通过defineProperty()方法创建props对象,即可拿到父组件传来的数据。
父组件的template中:
子组件:
- {{ i }}
注意在
2. emit方式
emit方式也是Vue中最常见的组件通信方式,该方式用于子传父;
父组件的template中:
子组件中:
const emits = defineEmits(['add']) emits('add', 1) 3. v-model方式
v-model不能严格成为数据的传递方式,其实只是减少了代码量。
// 等价于
子组件需要emit一个叫update:xxx的事件,再把需要更新的响应式数据传给emit方法的第二个参数即可,如:
const emits = defineEmits(['update:list']) emits('update:list', arr) 4、Refs
有时候想访问 r e f s 绑 定 的 组 件 的 属 性 或 者 方 法 , 我 们 会 使 用 refs绑定的组件的属性或者方法,我们会使用 refs绑定的组件的属性或者方法,我们会使用refs。但是Vue3不同于Vue2,在 Vue3的setup中我们是无法访问到this的,所以我们需要借助一个方法,那就是getCurrentInstance,该方法返回了当前的实例对象。
父组件如下:
子组件代码如下:
{{ message }}
注意⚠️,通过语法糖的写法,其组件是默认关闭的,也就是说如果是通过$refs或者$parents来访问子组件中定义的值是拿不到的,必须通过defineExpose向外暴露你想获取的值才行。
5. provide/inject
provide/inject是 Vue 中提供的一对 API。无论层级多深,API 都可以实现父组件到子孙组件的数据传递。
// 父组件中 provide('list', list.value) // 子组件中 const list = inject('list') 6. eventBus
Vue 3 中移除了 eventBus,但可以借助第三方工具来完成。Vue 官方推荐使用 mitt 或 tiny-emitter。
7. vuex/pinia
Vuex 和 Pinia 是 Vue 3 中的状态管理工具,使用这两个工具可以轻松实现组件通信。
到此这篇关于vue3组件通信方式的文章就介绍到这了,更多相关vue3组件通信内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- TypeScript对于Duck类型和模块命名空间应用_javascript技巧_
- 自行实现Promise.allSettled的Polyfill处理_JavaScript_
- Node.js实战之Buffer和Stream模块系统深入剖析详解_node.js_
- el-tree loadNode懒加载的实现_vue.js_
- JavaScript本地存储与会话存储的实现介绍_javascript技巧_
- npm install -g @vue/cli常见问题解决汇总_node.js_
- Angular 结合 dygraphs 实现 annotation功能_AngularJS_
- 解决element ui cascader 动态加载回显问题_vue.js_
- element el-tree折叠收缩的实现示例_vue.js_
- JavaScript Map 和 Object 的区别解析_javascript技巧_
