vue 组件基础

组件允许我们将 UI 划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构:

这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件模型,使我们可以在每个组件内封装自定义内容与逻辑。Vue 同样也能很好地配合原生 Web Component。 

定义一个组件

当使用构建步骤时,我们一般会将 Vue 组件定义在一个单独的 .vue 文件中,这被叫做单文件组件 (简称 SFC):

<script setup>
import { ref } from 'vue'

const count = ref(0)
</script>

<template>
  <button @click="count++">You clicked me {{ count }} times.</button>
</template>

 当不使用构建步骤时,一个 Vue 组件以一个包含 Vue 特定选项的 JavaScript 对象来定义:

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)
    return { count }
  },
  template: `
    <button @click="count++">
      You clicked me {{ count }} times.
    </button>`
  // 也可以针对一个 DOM 内联模板:
  // template: '#my-template-element'
}

这里的模板是一个内联的 JavaScript 字符串,Vue 将会在运行时编译它。你也可以使用 ID 选择器来指向一个元素 (通常是原生的 <template> 元素),Vue 将会使用其内容作为模板来源。

上面的例子中定义了一个组件,并在一个 .js 文件里默认导出了它自己,但你也可以通过具名导出在一个文件中导出多个组件。

使用组件 

要使用一个子组件,我们需要在父组件中导入它。假设我们把计数器组件放在了一个叫做 ButtonCounter.vue 的文件中,这个组件将会以默认导出的形式被暴露给外部。 

<script setup>
import ButtonCounter from './ButtonCounter.vue'
</script>

<template>
  <h1>Here is a child component!</h1>
  <ButtonCounter />
</template>

 

通过 <script setup>,导入的组件都在模板中直接可用。

当然,你也可以全局地注册一个组件,使得它在当前应用中的任何组件上都可以使用,而不需要额外再导入。关于组件的全局注册和局部注册两种方式的利弊,我们放在了组件注册这一章节中专门讨论。

组件可以被重用任意多次:

<h1>Here is a child component!</h1>
<ButtonCounter />
<ButtonCounter />
<ButtonCounter />

你会注意到,每当点击这些按钮时,每一个组件都维护着自己的状态,是不同的 count。这是因为每当你使用一个组件,就创建了一个新的实例

在单文件组件中,推荐为子组件使用 PascalCase 的标签名,以此来和原生的 HTML 元素作区分。虽然原生 HTML 标签名是不区分大小写的,但 Vue 单文件组件是可以在编译中区分大小写的。我们也可以使用 /> 来关闭一个标签。

如果你是直接在 DOM 中书写模板 (例如原生 <template> 元素的内容),模板的编译需要遵从浏览器中 HTML 的解析行为。在这种情况下,你应该需要使用 kebab-case 形式并显式地关闭这些组件的标签。

<!-- 如果是在 DOM 中书写该模板 -->
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>

相关推荐

  1. vue基础及注册

    2024-03-31 10:16:01       38 阅读
  2. Vue基础详细介绍

    2024-03-31 10:16:01       31 阅读
  3. vue 通讯

    2024-03-31 10:16:01       57 阅读
  4. vue

    2024-03-31 10:16:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 10:16:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 10:16:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 10:16:01       82 阅读
  4. Python语言-面向对象

    2024-03-31 10:16:01       91 阅读

热门阅读

  1. kvm虚拟机迁移--来自gpt

    2024-03-31 10:16:01       29 阅读
  2. 工作总结5

    2024-03-31 10:16:01       32 阅读
  3. 一梦三四年,回首UG在大学的往事(开篇)

    2024-03-31 10:16:01       32 阅读
  4. Python读取PDF文字 去掉页眉页脚

    2024-03-31 10:16:01       41 阅读
  5. vue 透传 Attributes(二)

    2024-03-31 10:16:01       36 阅读
  6. 使用 R 读取Excel文件的特定列

    2024-03-31 10:16:01       36 阅读
  7. SVG XML 格式定义图形入门介绍

    2024-03-31 10:16:01       46 阅读
  8. Kotlin语言教程

    2024-03-31 10:16:01       35 阅读
  9. FastAPI+React全栈开发16 设置一个React工作流

    2024-03-31 10:16:01       41 阅读
  10. Ecology9 分部(单位)获取示例

    2024-03-31 10:16:01       40 阅读
  11. I/O密集型任务和CPU密集型任务的理解与对比

    2024-03-31 10:16:01       36 阅读
  12. 给网站添加安全措施 -- http -> https

    2024-03-31 10:16:01       40 阅读
  13. vue 透传 Attributes

    2024-03-31 10:16:01       36 阅读
  14. 40个学习网站合集

    2024-03-31 10:16:01       34 阅读