vue3 组件间通信的方式(setup语法糖写法)

这篇具有很好参考价值的文章主要介绍了vue3 组件间通信的方式(setup语法糖写法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue3 组件间通信的方式(setup语法糖写法)

1. Props方式

该方式用于父传子,父组件以数据绑定的形式声明要传递的数据,子组件通过defineProps()方法创建props对象,即可拿到父组件传来的数据。

// 父组件
<template>
  <div>
    <son :msg="state.msg" />
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
import { reactive } from "vue";
const state = reactive({
  msg: "父组件的值"
});
</script>
// 子组件
<template>
  <div>
    {{ msg }}
  </div>
</template>

<script setup lang="ts">
const props = defineProps({
  msg: {
    type: String,
    default: ""
  }
});
</script>

2. emit方式

emit方式也是Vue中最常见的组件通信方式,该方式用于子传父。

// 父组件
<template>
  <div>
    <son @myClick="handleClick" />
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
const handleClick = val => {
  console.log(val);
};
</script>
// 子组件
<template>
  <div>
    <button @click="handleClick">点击</button>
  </div>
</template>

<script setup lang="ts">
const emit = defineEmits(["myClick"]);
const handleClick = () => {
  emit("myClick", "我是子组件的值");
};
</script>

3、defineExpose

利用defineExpose+ref 可以得到组件里的方法和变量

// 父组件
<template>
  <div>
    <son ref="sonRef" />
    <button @click="handleClick">点击</button>
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
import { ref } from "vue";
const sonRef = ref(null);
const handleClick = val => {
  console.log(sonRef.value.msg);
};
</script>
// 子组件
<template>
  <div>
    son
  </div>
</template>

<script setup lang="ts">
defineExpose({
  msg: "我是子组件"
});
</script>

4. provide/inject 

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

// 父组件
<template>
  <div>
    <son />
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
import { provide } from "vue";
provide("msg", "我是父组件");
</script>
// 子组件
<template>
  <div>
    {{ data }}
  </div>
</template>

<script setup lang="ts">
import { inject } from "vue";
const data = inject("msg");
</script>

5、attrs

attrs可以接受除去 props、style、 class之外的属性。

// 父组件
<template>
  <div>
    <son :msg="state.msg" :hello="state.hello" />
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
import { reactive } from "vue";
const state = reactive({
  msg: "我是父组件",
  hello: "hello"
});
</script>
// 子组件
<template>
  <div>
    son
  </div>
</template>

<script setup lang="ts">
import { useAttrs } from "vue";
const attrs = useAttrs();
console.log(attrs.msg); // 我是父组件
</script>

6. v-model方式

v-model不能严格成为数据的传递方式,其实只是减少了代码量。

// 父组件
<template>
  <div>
    <son v-model:msg="state.msg" />
    {{ state.msg }}
  </div>
</template>

<script setup lang="ts">
import son from "./son.vue";
import { reactive } from "vue";
const state = reactive({
  msg: "我是父组件"
});
</script>

子组件需要emit一个叫update:xxx的事件,再把需要更新的响应式数据传给emit方法的第二个参数即可。

// 子组件
<template>
  <div>
    son
    <button @click="handleClick">点击</button>
  </div>
</template>

<script setup lang="ts">
const props = defineProps({
  msg: {
    type: String,
    default: ""
  }
});
console.log(props.msg);
// 子组件需要emit一个叫update:xxx的事件,再把需要更新的响应式数据传给emit方法的第二个参数即可
const emit = defineEmits(["msg"]);
const handleClick = () => {
  emit("update:msg", "我是子组件");
};
</script>

7. Vuex / Pinia

Vuex 和 Pinia 是 Vue 3 中的状态管理工具,使用这两个工具可以轻松实现组件通信,具体的使用方法可以查阅官方文档。

Vuex官方文档

Pinia官方文档文章来源地址https://www.toymoban.com/news/detail-519536.html

到了这里,关于vue3 组件间通信的方式(setup语法糖写法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue3 setup语法糖 使用组件内的路由守卫beforeRouteEnter使用方法

    由于beforeRouteEnter在setup语法糖中是无法使用的,所以需要再起一个script标签 使用defineComponent方式来使用就可以了

    2024年02月11日
    浏览(43)
  • vue3-setup语法糖之组件传参(defineProps、defineEmits、defineExpose)

    vue3官方文档  defineProps  和  defineEmits  都是只能在  script setup  中使用的 编译器宏 。他们不需要导入,且会随着  script setup  的处理过程一同被编译掉。 defineProps  接收与  props  选项相同的值, defineEmits  接收与  emits  选项相同的值。   父传子  - defineProps  父组件 子

    2023年04月08日
    浏览(37)
  • 【vue3】学习笔记--组件通信方式

    学习vue3总是绕不开vue2 vue3组件通信方式如下: props数据只读,从父组件传递到子组件,子组件内部不可直接更改 子组件需要使用defineProps方法接受父组件传递过来的数据 setup语法糖下局部组件无需注册直接可以使用 父组件 子组件 vue框架中事件分为两种:原生的DOM事件和自定

    2024年02月13日
    浏览(35)
  • Vue3组件间的通信方式

    目录  1.props父向子组件通信 2.自定义事件 子向父组件通信 3.全局事件总线 4.v-model组件通信(父子组件数据同步) 绑定单个数据同步  绑定多个数据同步  5.useAttrs组件通信  6.ref与$parent ref获取子组件实例对象  $parent获取父组件实例对象  7.provide-inject 可以实现隔辈传输 8.

    2024年02月17日
    浏览(29)
  • 记录--vue3 setup 中国省市区三级联动options最简洁写法,无需任何库

    在写页面的时候,发现表单里面有一个省市区的 options 组件要写,因为表单很多地方都会用到这个地址选择,我便以为很简单嘛。 虽然很简单的一个功能,但是网络上能搜索到的教程大多都是需要配合 elementUI 等各种 UI 库的,但是我的项目并没有使用这些 UI 库,何况我只是

    2024年02月05日
    浏览(52)
  • vue3+element-plus Dialog对话框的使用 与 setup 写法的使用

    一. 传统写法不使用setup语法糖 方式一:通过 v-model 的方式实现子组件的显示与隐藏 父组件的内容 子组件内容 方式二:通过为元素绑定 ref 的方式实现子组件的显示与隐藏 父组件的内容 子组件内容 2. setup 语法糖写法 父组件 子组件 总结: 对于传统写法两种方式来看,都有

    2024年02月09日
    浏览(41)
  • 【vue3】基础知识点-setup语法糖

    学习vue3,都会从基础知识点学起。了解setup函数,ref,recative,watch、comptued、pinia等如何使用 今天说vue3组合式api,setup函数 在学习过程中一开始接触到的是这样的,定义数据且都要通过return返回 最新接触到的是这样的 两种不同的写法,那区别是什么呢? 其实在script标签上直

    2024年02月13日
    浏览(31)
  • 第九章、Vue3中<script setup>语法糖

    摘要:script setup语法糖: https://cn.vuejs.org/api/sfc-script-setup.html 一、script setup语法糖用法 1.1 基本语法: 要使用这个语法,在script 中添加setup属性即可。 里面的代码最终会编译成setup()函数中的内容: 所以每次在组件实例被创建时,都会执行; 1.2 顶层绑定自动暴露给模板 当使用

    2024年02月11日
    浏览(31)
  • Vue3通透教程【六】setup语法糖、computed函数、watch函数

    专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓得,所谓三大框架使用人数最多,公司选型最多的框架,凉哥之前在文章中也提到过就是 Vue 框架之所以火起来的原因,和 Vue 框架相比其

    2024年01月20日
    浏览(32)
  • 最新 Vue3、TypeScript、组合式API、setup语法糖 学习笔记

    备注:目前 vue-cli 已处于维护模式,官方推荐基于 Vite 创建项目。 vite 是新一代前端构建工具,官网地址:https://vitejs.cn vite 的优势如下: 轻量快速的热重载(HMR),能实现极速的服务启动。 对 TypeScript 、 JSX 、 CSS 等支持开箱即用。 真正的按需编译,不再等待整个应用编译

    2024年02月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包