首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >必知的 Vue3 组件传值技巧:解锁组件交互新姿势

必知的 Vue3 组件传值技巧:解锁组件交互新姿势

作者头像
程序媛夏天
发布2024-11-13 08:25:57
发布2024-11-13 08:25:57
83000
代码可运行
举报
运行总次数:0
代码可运行
在这里插入图片描述
在这里插入图片描述

父传子defineProps

基本概念

在 Vue 3 中,父传子是一种组件间通信的方式,用于将父组件的数据传递给子组件。这种通信方式可以让组件之间更好地协作,实现功能的复用和模块的划分。

实现步骤

在父组件中传递数据 App.vue

代码语言:javascript
代码运行次数:0
运行
复制
<template>
    <Header propsName="夏天学编程" propsUrl="xiatian" />
    <button @click="countAdd">点击</button>
    <Footer :="propsWeb" />
</template>
<script setup>
   import {reactive} from 'vue';
   import Header from './header.vue';
   import Footer from './footer.vue';
   const propsWeb = reactive({
    user:'夏天',
    url:'biancheng',
    count:10
   })
   const countAdd = () => {
    propsWeb.count++;
    console.log(propsWeb.count);
   }
</script>

在子组件中接收数据 在子组件header.vue和footer.vue中,需要使用props来接收父组件传递过来的数据。 首先,通过defineProps函数定义了一个props对象,它包含多个属性,并且指定了其类型。这是一种类型检查的方式,可以确保传递的数据类型符合预期。然后,将props里面的属性值赋值给propsWeb变量,这样就可以在子组件的模板中使用propsWeb来显示父组件传递过来的数据了。

header.vue

代码语言:javascript
代码运行次数:0
运行
复制
<template>
    <h3>Header</h3>
</template>
<script setup>
  const props = defineProps(["propsName","propsUrl"])
  console.log(props)
</script>

footer.vue

代码语言:javascript
代码运行次数:0
运行
复制
<template>
  <h3>Footer</h3>
</template>
<script setup>
const props = defineProps({
  user: String,
  url: {
    type: String,
    Required: true,
    default: "xiatian.com",
  },
  count: Number,
});
console.log(props);
</script>

数据类型检查和默认值

类型检查

在defineProps中可以对传递的数据进行类型检查,除了String类型,还可以是Number、Boolean、Object、Array等。

设置默认值

可以为props设置默认值,当父组件没有传递相应的数据时,子组件就会使用默认值。

动态数据传递

父组件传递的数据可以是动态变化的。例如,父组件中有一个按钮,点击按钮可以改变传递给子组件的数据。 当点击按钮时,count的值会改变,这个变化会自动传递给子组件,子组件会根据新的数据进行更新。这是因为 Vue 的响应式系统会自动跟踪数据的变化,并更新与之相关的组件。


子传父defineEmits

基本概念

在 Vue 3 中,子传父是组件间通信的重要方式。它允许子组件将数据或事件传递给父组件,从而实现组件之间的反向通信,这在构建复杂的应用程序结构时非常有用。

实现步骤

在父组件中监听事件并接收数据 App.vue

代码语言:javascript
代码运行次数:0
运行
复制
<template>
    <Header @gitWeb="emitsGitWeb" @userAdd="emitsUserAdd"/>
    {{ web.url }} - {{ user }}
</template>
<script setup>
    import { ref, reactive } from 'vue'
    const web = reactive({
        name: "夏天",
        url: 'xiatian.com'
    })
    const user = ref(0)
    const emitsGitWeb = (data) => {
        console.log(data)
    }
    const emitsUserAdd = (data) => {
        console.log(data)
        user.value += data
    }
</script>

在子组件中触发事件

header.vue

代码语言:javascript
代码运行次数:0
运行
复制
<template>
    <div>
        <h1>我是header</h1>
        <button @click="add">点击</button>
    </div>
</template>
<script setup>
   const emits = defineEmits(['gitWeb','userAdd'])
   emits("gitWeb",{name:'夏天学编程',url:'www.xiatian.com'})
   // 子组件可以向父组件传递多个参数。
   const add = ()=>{
       emits('userAdd',10)
   }
</script>

事件名规范和注意事项

事件名规范

自定义事件名最好遵循一定的命名规范,比如使用小写字母和连字符的组合,这样可以提高代码的可读性。避免使用大写字母开头的驼峰命名法,因为在 HTML 模板中,事件名是大小写不敏感的,可能会导致一些难以发现的问题。

注意事项

父组件在监听子组件事件时,方法名要正确匹配。如果方法名拼写错误或者没有正确定义,那么在子组件触发事件时,父组件将无法正确接收和处理数据。同时,要注意defineEmits函数定义的事件名和子组件中emits触发的事件名要一致,否则事件无法正常触发。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 父传子defineProps
    • 基本概念
    • 实现步骤
    • 数据类型检查和默认值
      • 类型检查
      • 设置默认值
      • 动态数据传递
  • 子传父defineEmits
    • 基本概念
    • 实现步骤
    • 事件名规范和注意事项
      • 事件名规范
      • 注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档