# v3_study **Repository Path**: frontend-qin/v3_study ## Basic Information - **Project Name**: v3_study - **Description**: 第一次写vue3 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-18 - **Last Updated**: 2022-02-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## setup 使用 defineProps - 第一种语法 ```ts defineProps<{ msg: string; // 定义string 类型 num: number; // 定义number 类型 list: Array; // 定义 数组 类型【每个元素只能是 数字】 msgs: Array; // 定义string 类型【每个元素只能是 字符串】 }>(); ``` - 第二种语法 ```ts type PeopleType = { name: string; age: number; gender: "man" | "woman" | ""; }; interface DefinePropsType { msg: string; // 定义string 类型 num: number; // 定义number 类型 list: Array; // 定义 数组 类型【每个元素只能是 数字】 msgs: Array; // 定义string 类型【每个元素只能是 字符串】 people: Array; // 定义更复杂的类型 } defineProps(); ``` ## setup 使用 defineEmits - defineEmits 定义事件回调函数 ts 类型 ```vue ``` ```ts // 定义事件类型 const emit = defineEmits<{ (event: "change"): void; // 不传参的定义 (event: "update", num: number): void; // 传参的定义 }>(); // 使用change函数 const addHandler = () => { emit("change"); // 调用自定义的函数 }; // 使用 update 函数 const accumulationHandler = () => { emit("update", 10); // 传参调用 }; ``` - 父组件使用 ```vue ``` ## reactive 用于包装引用数据类型 - 使用泛型 ```ts ``` - 泛型 T 继承自 object, 所以可以直接使用 ```ts const model2 = reactive({ name: "李思", age: 10, list: [1, 2, 3], }); ``` ## ref 包装 简单数据类型 ```ts // 用于修饰 基本数据类型 import { ref } from "vue"; const num = ref(10); const str = ref("自渡船"); // 当然,如果你非要 修饰引用数据,也是可以的, 他会内部使用 reactive 转化 //官网说明: 如果将对象分配为 ref 值,则它将被 reactive 函数处理为深层的响应式对象。 // const obj = ref({ name: 10 }); ``` ## defineExpose 暴露数据 - 子组件的方法和属性变量 向外暴露 ```ts import { ref } from "vue"; const b = ref(1); const a = ref(2); const add = () => { b.value += 1; }; defineExpose({ a, add, }); ``` - 通过绑定 ref 在父组件中获取子组件的实例,以及获取 dom 元素 ```vue ``` ## 使用 withDefaults 渲染默认值 ```vue ``` ## v3 中在组件上使用 v-mdel - 父组件使用 v-model 给子组件传值 ```vue ``` - 子组件的写法 ```vue ``` ## 自定义 v-model 的使用 - 父组件中使用 【v-model:自定义字符串="传入的值"】 ```vue ``` - 子组件中使用 ```vue ``` ## 插槽 和 具名插槽 - 子组件中 ```vue ``` - 父组件中使用子组件 ```vue ``` ## Provide 和 Inject 的使用 - 父组件中渲染 ```vue ``` - 子组件中使用 ```vue ```