Vue3项目一些语法
·
defineProps、withDefaults
1. defineProps
Vue 3 提供的宏,用于在
<script setup>中定义组件接收的 props
- 括号内的泛型
<{}>指定了 props 的类型结构
例子:
const props = withDefaults(defineProps<{ active?: boolean }>(), { active: false });
意思说明:
这行代码创建了一个 props 对象,其中:
- 如果父组件传递了 active 属性,则使用传递的值
- 如果父组件未传递 active 属性,则默认值为
false- 在组件内部通过 props.active 访问该属性值
2. 类型定义
{ active?: boolean }
active - 属性名称
?- 表示可选属性(可以不传递)boolean- 属性的数据类型为布尔值
3.withDefaults
- 为 props 设置默认值
- 第二个参数
{ active: false }指定 active 属性的默认值为false
4.Vue2.0中的prop语法
export default {
props: {
active: {
type: Boolean,
default: false
}
}
}
Record 类型 -TypeScript内置的工具类型
const PAYMENT_COLORS: Record<string, string> = {
a: "#faad14",
b: "#000000",
c: "#1890FF",
d: "#07c160",
all: "#F56C6C"
};
语法结构
Record<K, T>
K- 键(key)的类型T- 值(value)的类型
作用:
- 定义一个对象,键为字符串类型,值也为字符串类型
- 提供类型安全,确保对象结构符合预期
在访问对象属性时提供类型检查
as const - TypeScript 的常量断言
代码
没使用as const
const SERIES_KEYS = ["type1", "type2", "type2", "type3", "type4"];
// 类型推断为: string[]
// 可以修改数组、添加元素等
使用as const
const SERIES_KEYS = ["type1", "type2", "type3", "type4", "type5"] as const;
//类型推断为: readonly
作用:
1. 类型更精确
- 每个元素都被视为字面量类型(literal type)
- 不是宽化的 string 类型,而是具体的值类型
2. 数组变为只读
- 数组不可修改(不能 push、pop、splice 等)
- 提供运行时保护
Watch
watch是组合式 API(Composition API)中用于监听响应式数据变化并执行副作用(如发起网络请求、手动修改 DOM 等)的核心 API。
基础语法
watch接收三个参数:数据源(source)、回调函数(callback)和可选的配置项(options)。watch( source, // 要监听的数据源 (newVal, oldVal) => { // 数据变化时执行的回调逻辑 }, options // 可选配置项,如 { deep: true, immediate: true } )
监听单个 ref 数据
const count = ref(0)
watch(count, (newVal, oldVal) => {
console.log(`count 从 ${oldVal} 变为 ${newVal}`)
})
监听响应式对象的特定属性(使用 getter 函数)
直接监听响应式对象的属性值无法触发回调,必须使用返回该属性的 getter 函数。
const user = reactive({ name: '张三' })
watch(
() => user.name,
(newVal) => {
console.log('名字变化:', newVal)
}
)
监听多个数据源
通过传入数组的形式,回调函数接收的新旧值也是对应的数组。
const count = ref(0)
const name = ref('李四')
watch([count, name], ([newCount, newName], [oldCount, oldName]) => {
console.log(`count: ${oldCount} -> ${newCount}, name: ${oldName} -> ${newName}`)
})
深度监听
默认情况下 watch 是浅层监听。如果需要监听嵌套对象或数组内部属性的变化,需要配置 deep: true。
const state = reactive({ user: { name: 'Alice' } })
watch(
() => state.user,
(newVal) => {
console.log('user 内部属性发生变化')
},
{ deep: true }
)
常用配置选项 (options)

更多推荐

所有评论(0)