vue3系列:(四)vue3使用props、defineProps实现父子传参
组合式API(SFC)一个组件选项,在组件被创建之前,props 被解析之后执行。它是组合式 API 的入口。入参:{Data} props{SetupContext} context与使用选项式 API 时的 this.$props 类似,该 props 对象将仅包含显性声明的 prop。并且,所有声明了的 prop,不管父组件是否向其传递了,都
·
组合式API(SFC)
一个组件选项,在组件被创建之前,props 被解析之后执行。它是组合式 API 的入口。
-
入参:
{Data} props{SetupContext} context
与使用选项式 API 时的
this.$props类似,该props对象将仅包含显性声明的 prop。并且,所有声明了的 prop,不管父组件是否向其传递了,都将出现在props对象中。其中未被传入的可选的 prop 的值会是undefined。如果需要检测一个可选的 prop 是否未被传递,你可以将其默认值设置为一个 Symbol:
const isAbsent = Symbol() export default { props: { foo: { default: isAbsent } }, setup(props) { if (props.foo === isAbsent) { // foo 没有被传入。 } } } -
类型声明:
interface Data { [key: string]: unknown } interface SetupContext { attrs: Data slots: Slots emit: (event: string, ...args: unknown[]) => void expose: (exposed?: Record<string, any>) => void } function setup(props: Data, context: SetupContext): Data
TIP若要对传递给
setup()的参数进行类型推断,你需要使用 [defineComponent]。
单文件组件<script setup>
在 <script setup> 中必须使用 defineProps API 来声明 props ,它们具备完整的类型推断并且在 <script setup> 中是直接可用的:
<script setup>
const props = defineProps({
belong: {
type: String,
required: true,
},
});
</script>
//父组件
<Test :name="name"></Test>
defineProps是只在<script setup>中才能使用的编译器宏。他们不需要导入且会随着<script setup>处理过程一同被编译掉。defineProps接收与props选项相同的值。defineProps在选项传入后,会提供恰当的类型推断。- 传入到
defineProps的选项会从setup中提升到模块的范围。因此,传入的选项不能引用在setup范围中声明的局部变量。这样做会引起编译错误。但是,它可以引用导入的绑定,因为它们也在模块范围内。
如果使用了 Typescript,使用纯类型声明来声明 prop 也是可以的。
(\ _ /)
( * . *)
/>❤️
更多推荐



所有评论(0)