props
Props 声明
使用 <script setup>
的单文件组件中,props 可以使用 defineProps()
宏来声明:
1 2 3 4 5
| <script setup> const props = defineProps(['foo'])
console.log(props.foo) </script>
|
单向数据流
所有的 props 都遵循着单向绑定原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递。
不应该在子组件中去更改一个 prop。警告!prop 是只读的!
更改一个 prop 的需求:
prop 被用于传入初始值;而子组件想在之后将其作为一个局部数据属性。
1 2 3 4 5
| const props = defineProps(['initialCounter'])
const counter = ref(props.initialCounter)
|
需要对传入的 prop 值做进一步的转换。
1 2 3 4
| const props = defineProps(['size'])
const normalizedSize = computed(() => props.size.trim().toLowerCase())
|
Prop 校验
向 defineProps()
宏提供一个带有 props 校验选项的对象,例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| defineProps({ propA: Number, propB: [String, Number], propC: { type: String, required: true }, propD: { type: Number, default: 100 }, propE: { type: Object, default(rawProps) { return { message: 'hello' } } }, propF: { validator(value) { return ['success', 'warning', 'danger'].includes(value) } }, propG: { type: Function, default() { return 'Default function' } } })
|