返回

Vue.js:从零构建用户界面 - 设计与实现第三章

前端

3.1 声明式地UI

Vue3 是一个声明式的UI框架,这意味着我们在使用Vue3开发页面的时候,是以一种声明性的方式来UI组件的结构和行为,而不是以一种命令式的,一步步地编写如何改变UI的方式。

声明式UI是一种更加自然、更加符合人类思考方式的编程范式。它使得我们可以专注于描述我们想要达到的最终结果,而不用考虑如何一步步地实现它。

举个例子,如果我们想要创建一个简单的计数器,我们可以在Vue3中这样写:

<template>
  <div>
    <button @click="count++">+</button>
    <span>{{ count }}</span>
  </div>
</template>

<script>
export default {
  data() {
    return {
      count: 0
    }
  }
}
</script>

在这个例子中,我们首先定义了一个模板,其中包含了一个按钮和一个文本元素。按钮有一个点击事件监听器,当按钮被点击时,count变量的值会增加1。文本元素显示了count变量的值。

然后,我们定义了一个脚本,其中包含了一个data函数。data函数返回了一个对象,这个对象包含了一个count属性,其初始值为0。

当这个组件被渲染时,Vue3会创建一个虚拟DOM,并根据虚拟DOM创建真实的DOM。当count变量的值改变时,Vue3会更新虚拟DOM,并根据更新后的虚拟DOM更新真实的DOM。

声明式UI的另一个好处是它可以很容易地进行重构。因为我们只关心最终的结果,而不关心如何实现它,所以我们可以很容易地改变组件的结构或行为,而不用担心破坏其他组件。

3.2 组件系统

组件是Vue3的核心概念之一。组件是一个可重用的UI元素,它可以独立存在,也可以组合成更复杂的UI。

组件可以帮助我们构建更具模块化、更易于维护的应用程序。我们可以将应用程序分解成更小的组件,然后组合这些组件来构建复杂的UI。

举个例子,我们可以创建一个Button组件,这个组件可以被用来表示任何类型的按钮,例如,提交按钮、取消按钮、删除按钮等。

<template>
  <button>
    <slot></slot>
  </button>
</template>

<script>
export default {
  props: {
    type: {
      type: String,
      default: 'button'
    }
  }
}
</script>

在这个例子中,我们定义了一个Button组件,它有一个type属性,用于指定按钮的类型。slot元素允许我们在组件中插入内容。

我们可以这样使用这个组件:

<Button type="submit">提交</Button>
<Button type="cancel">取消</Button>
<Button type="delete">删除</Button>

这样,我们就创建了三个不同的按钮,但我们只使用了同一个组件。

组件还可以被嵌套使用。我们可以创建一个Card组件,这个组件包含一个标题和一个内容部分。

<template>
  <div class="card">
    <div class="card-header">
      <slot name="header"></slot>
    </div>
    <div class="card-body">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  name: 'Card'
}
</script>

然后,我们可以这样使用这个组件:

<Card>
  <template #header>
    <h1>标题</h1>
  </template>
  <p>内容</p>
</Card>

这样,我们就创建了一个带有标题和内容的卡片。

组件系统是Vue3的一大优势。它使得我们可以构建更具模块化、更易于维护的应用程序。