Vue3 组合式 API 实战

最近在详细学习vue3的知识点,通过小案例可以更融会贯通的理解,为了更好地理解 setup()ref()reactive()computed()watch() 等核心概念,我决定动手实现一个「任务清单 TodoList」。 这篇文章将记录我学习到的知识点

核心知识点:

(1)ref 与 reactive:

ref:基本数据类型,reactive:数组,对象

(2)computed实现任务筛选:

js 复制代码
const filteredTodos = computed(() => {
  if (filter.value === 'active') return todos.filter(t => !t.done)
  if (filter.value === 'completed') return todos.filter(t => t.done)
  return todos
})

组件通信:

  1. 父组件到子组件的通信(props)
    父组件通过props将数据传递给子组件,子组件接受的props是只读的
xml 复制代码
<!-- Parent.vue -->
<template>
<Child :message="parentMessage" />
</template>

<!-- Child.vue -->
<template>
<p>{{ message }}</p>
</template>
<script>
const props =defineProps({
message : String})
</script

2.props的写法

(1)基本对象类型声明:

js 复制代码
<script>
 const props = defineProps({
     message:{
       type:String,
       default: 0,
       required: true
     }
     
 })
</script>

(2)ts格式

ts 复制代码
<script setup lang="ts">
interface Props {
  title: string
  count?: number
}

const props = defineProps<Props>()
</script>

(3)数组形式

xml 复制代码
<script setup>
const props = defineProps(['title', 'count'])
</script>

3.子组件到父组件通信(emit):

子组件通过$emit向父组件发送事件,父组件监听并获取带过来的参数

xml 复制代码
<!-- Parent.vue -->
<template>
  <Child @update="handleUpdate" />
</template>

<!-- child.vue -->
<button @click="sendUpdate">Send to Parent</button>
<script>
const emit = defineEmits(['update'])
function sendUpdate() {
  emit('update', 'Hello Parent')
}
<script>

v-model的自定义事件

  1. 在v-model中通过prop和emit进行数据的双向绑定,在此中了解明白其双向数据流动的解基本原理
  • prop:value -> modelValue
  • 事件:input -> update:modelValue
  • 新增 支持多个v-model
  • 新增 支持自定义 修饰符 Modifiers
  1. 在这里先只了解学习基本用法
xml 复制代码
 <div>
  我是父组件:<input type="text" v-model="isfu">
 </div>
 <v-model v-model="isfu"></v-model>

</template>
<script setup lang='ts'>
import { ref } from 'vue';
import vModel from './components/v-model.vue';
const isfu =ref('')

 <div>
  我是子组件:
  <input type="text" :value="modelValue" @input="sent">
 </div>

</template>
<script setup lang='ts'>
const prop =defineProps({
  modelValue:{
    type:String
  }
})
const emit =defineEmits(['update:modelValue'])
const sent =(e:Event)=>{
  emit('update:modelValue',(e.target as HTMLInputElement ).value)
  
}
</script>

子组件通过prop接收,emit再将数据发送给父组件

相关推荐
持续前行6 小时前
vscode 中找settings.json 配置
前端·javascript·vue.js
JosieBook6 小时前
【Vue】11 Vue技术——Vue 中的事件处理详解
前端·javascript·vue.js
安逸点6 小时前
Vue项目中使用xlsx库解析Excel文件
vue.js
一只小阿乐6 小时前
vue 改变查询参数的值
前端·javascript·vue.js·路由·router·网文·未花中文网
小酒星小杜7 小时前
在AI时代下,技术人应该学会构建自己的反Demo地狱系统
前端·vue.js·ai编程
Code知行合壹7 小时前
Pinia入门
vue.js
今天也要晒太阳4737 小时前
element表单和vxe表单联动校验的实现
vue.js
依赖_赖8 小时前
前端实现token无感刷新
前端·javascript·vue.js
hhcccchh9 小时前
学习vue第十三天 Vue3组件深入指南:组件的艺术与科学
javascript·vue.js·学习
zhengxianyi5159 小时前
ruoyi-vue-pro本地环境搭建(超级详细,带异常处理)
前端·vue.js·前后端分离·ruoyi-vue-pro