Vue.js:从零构建用户界面 - 设计与实现第三章
2023-11-21 21:36:20
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的一大优势。它使得我们可以构建更具模块化、更易于维护的应用程序。