Vue3中setup函数如何进行组间通讯

简介: Vue3中setup函数如何进行组间通讯

父子组件通讯

父传子:

父组件代码示例:

<template>
  <children :list="list"></children>
  <div>
    <input v-model="value" type="text" placeholder="请输入" />
    <button @click="handleAdd"> 添加 </button>
  </div>
</template>
<script setup>
  import { ref } from 'vue'
  import Children from '@/views/parentChildCommunicat/parentToChildren/components/children.vue'
  const list = ref(['JavaScript', 'HTML', 'CSS'])
  const value = ref('')
  const handleAdd = () => {
    list.value.push(value.value)
    value.value = ''
  }
</script>

子组件代码:

<template>
  <ul>
    <li v-for="item in props.list" :key="item">{{ item }}</li>
  </ul>
</template>
<script setup>
  import { defineProps } from 'vue'
  const props = defineProps({
    list: {
      type: Array,
      default: () => []
    }
  })
</script>

子传父:

子组件:

<template>
  <div>
    <input v-model="value" type="text" placeholder="请输入" />
    <button @click="handleAdd"> 添加 </button>
  </div>
</template>
<script setup>
  import { ref, defineEmits } from 'vue'
  const value = ref('')
  const emits = defineEmits(['add'])
  const handleAdd = () => {
    emits('add', value.value)
    value.value = ''
  }
</script>

父组件

<template>
  <ul>
    <li v-for="item in list" :key="item">{{ item }}</li>
  </ul>
  <son @add="add" />
</template>
<script setup>
  import { ref } from 'vue'
  import Son from './components/son.vue'
  const list = ref(['JavaScript', 'HTML', 'CSS'])
  const add = (value) => {
    list.value.push(value)
  }
</script>

v-model 实现父子组件双向通信

子组件:

<template>
  <div>
    <input v-model="value" type="text" placeholder="请输入" />
    <button @click="handleAdd"> 添加 </button>
  </div>
</template>
<script setup>
  import { ref, defineEmits, defineProps } from 'vue'
  const value = ref('')
  const props = defineProps({
    list: {
      type: Array,
      default: () => []
    }
  })
  const emits = defineEmits(['update:list'])
  const handleAdd = () => {
    const arr = props.list
    arr.push(value.value)
    emits('update:list', arr)
    value.value = ''
  }
</script>

父组件

<template>
  <ul>
    <li v-for="i in list" :key="i">{{ i }}</li>
  </ul>
  <child-components v-model:list="list" />
</template>
<script setup>
  import { ref } from 'vue'
  import ChildComponents from './components/child-components.vue'
  const list = ref(['JavaScript', 'HTML', 'CSS'])
</script>

跨组件通信

Vuex和Pinia


相关文章
|
6天前
|
缓存 监控 UED
升级 Vue3 时,如何减少打包体积的增加?
升级 Vue3 时,如何减少打包体积的增加?
85 59
|
5天前
|
JavaScript
在vue3中(vite)引入unocss,安装配置unocss
在vue3中(vite)引入unocss,安装配置unocss
|
2天前
|
JavaScript
理解 Vue 的 setup 应用程序钩子
【10月更文挑战第3天】`setup` 函数是 Vue 3 中的新组件选项,在组件创建前调用,作为初始化逻辑的入口。它接收 `props` 和 `context` 两个参数,内部定义的变量和函数需通过 `return` 暴露给模板。`props` 包含父组件传入的属性,`context` 包含组件上下文信息。`setup` 可替代 `beforeCreate` 和 `created` 钩子,并提供类似 `data`、`computed` 和 `methods` 的功能,支持逻辑复用和 TypeScript 类型定义。
20 11
|
6天前
|
API UED
如何实现Vue2项目升级Vue3?
如何实现Vue2项目升级Vue3?
13 1
|
6天前
|
JavaScript
vue 函数化组件
vue 函数化组件
|
6天前
|
API UED
升级 Vue3 后,项目的打包体积会有什么变化?
升级 Vue3 后,项目的打包体积会有什么变化?
92 57
|
7天前
|
JavaScript
vue组件中的插槽
本文介绍了Vue中组件的插槽使用,包括单个插槽和多个具名插槽的定义及在父组件中的使用方法,展示了如何通过插槽将父组件的内容插入到子组件的指定位置。
|
5天前
|
JavaScript
vue消息订阅与发布
vue消息订阅与发布
|
6天前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
6天前
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
下一篇
无影云桌面