props 与 slot 的区别

props

父组件传给子组件参数

  • 用来接收参数,父组件向子组件传参,可以放在 props 中
  • 该参数是一个响应式数据,props 的更改会导致子组件的刷新

slot

父组件传给子组件模板

  • 用于在组件中插入内容或者组件之间的相互嵌套,如果组件中有需要单独定义的地方可以使用 slot
  • <slot>元素上绑定的 attribute 称为插槽 prop(示例中的 user)
  • v-slot 指令可以将子组件内部的 插槽 prop 提供给父组件使用
    <!-- 子组件 current-user -->
    <span>
        <slot v-bind:user="user"> {{ user.lastName }} </slot>
    </span>
    
    <!-- 父组件中使用 -->
    <!-- slotProps 是一个包含所有插槽 prop 的对象,命名随意 -->
    <current-user>
        <template v-slot:default="slotProps">
            {{ slotProps.user.firstName }}
        </template>
    </current-user>
    
    <!-- 父组件中使用(错误) -->
    <current-user> {{ user.firstName }} </current-user>
    <!-- 此时的 user 访问的是父组件中的 user,因此可能为 undefined -->
    
Last Updated:
Contributors: af