vue Props

Props 声明

一个组件需要显式声明它所接受的 props,这样 Vue 才能知道外部传入的哪些是 props,哪些是透传 attribute

在使用 <script setup> 的单文件组件中,props 可以使用 defineProps() 宏来声明:

<script setup>
const props = defineProps(['foo'])

console.log(props.foo)
</script>

在没有使用 <script setup> 的组件中,prop 可以使用 props 选项来声明:

export default {
  props: ['foo'],
  setup(props) {
    // setup() 接收 props 作为第一个参数
    console.log(props.foo)
  }
}

注意传递给 defineProps() 的参数和提供给 props 选项的值是相同的,两种声明方式背后其实使用的都是 prop 选项。

除了使用字符串数组来声明 prop 外,还可以使用对象的形式:

// 使用 <script setup>
defineProps({
  title: String,
  likes: Number
})
// 非 <script setup>
export default {
  props: {
    title: String,
    likes: Number
  }
}

对于以对象形式声明的每个属性,key 是 prop 的名称,而值则是该 prop 预期类型的构造函数。比如,如果要求一个 prop 的值是 number 类型,则可使用 Number 构造函数作为其声明的值。

对象形式的 props 声明不仅可以一定程度上作为组件的文档,而且如果其他开发者在使用你的组件时传递了错误的类型,也会在浏览器控制台中抛出警告。我们将在本章节稍后进一步讨论有关 prop 校验的更多细节。

如果你正在搭配 TypeScript 使用 <script setup>,也可以使用类型标注来声明 props:

<script setup lang="ts">
defineProps<{
  title?: string
  likes?: number
}>()
</script>

传递 prop 的细节

Prop 名字格式

如果一个 prop 的名字很长,应使用 camelCase 形式,因为它们是合法的 JavaScript 标识符,可以直接在模板的表达式中使用,也可以避免在作为属性 key 名时必须加上引号。

defineProps({
  greetingMessage: String
})
<span>{{ greetingMessage }}</span>

 虽然理论上你也可以在向子组件传递 props 时使用 camelCase 形式 (使用 DOM 内模板时例外),但实际上为了和 HTML attribute 对齐,我们通常会将其写为 kebab-case 形式:

<MyComponent greeting-message="hello" />

对于组件名我们推荐使用 PascalCase,因为这提高了模板的可读性,能帮助我们区分 Vue 组件和原生 HTML 元素。然而对于传递 props 来说,使用 camelCase 并没有太多优势,因此我们推荐更贴近 HTML 的书写风格。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 03:06:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 03:06:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 03:06:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 03:06:02       20 阅读

热门阅读

  1. 【题解 | 01背包】分割等和子集

    2024-04-02 03:06:02       16 阅读
  2. nginx怎么配置https访问

    2024-04-02 03:06:02       15 阅读
  3. [lesson01]学习C++的意义

    2024-04-02 03:06:02       17 阅读
  4. Pytorch实用教程: torch.tensor()的用法

    2024-04-02 03:06:02       15 阅读
  5. js的date对象有什么用

    2024-04-02 03:06:02       14 阅读
  6. 【开发总结】electron浏览器打开踩坑

    2024-04-02 03:06:02       17 阅读
  7. Spring 事物原理及工作原理

    2024-04-02 03:06:02       11 阅读
  8. 343. 整数拆分(力扣LeetCode)

    2024-04-02 03:06:02       17 阅读
  9. #git 撤消对文件的更改

    2024-04-02 03:06:02       13 阅读