Vue3的组合式API太强了,它把Vue2中的一些API进行了组合,使得开发者可以更加轻松地使用它们。
首先,Vue3的组合式API支持多个语言,包括JavaScript、TypeScript和CoffeeScript。这样,开发者就可以根据自己的喜好选择最适合自己的语言来编写代码。
其次,Vue3的组合式API也支持多个平台,包括Web、Native和Weex。这样,开发者就可以根据不同平台的需要来选择最适合自己的平台来进行开发。
此外,Vue3的组合式API也能够帮助开发者快速实现一些常用功能。例如:它能够帮助开发者快速实现数据驱动、响应式UI、单文件组件、路由和服务端呈现等功能。
// 使用 Vue 3 的 API 快速创建一个应用 import { createApp } from 'vue' const app = createApp({ data() { return { message: 'Hello World!' } }, template: `<div>{{ message }}</div>` }) // 渲染到 DOM 根节点上 app.mount('#app')
本节代码示例使用单文件组件的语法
本指南假定你已经阅读了组合式 API 简介和响应性基础。如果你不熟悉组合式 API,请先阅读此文章。
在使用组合式 API 时,响应式引用和模板引用的概念是统一的。为了获得对模板内元素或组件实例的引用,我们可以像往常一样声明 ref 并从 setup() 返回:
<template>
<div ref="root">This is a root element</div>
</template>
<script>
import { ref, onMounted } from "vue"
export default {
setup() {
const root = ref(null)
onMounted(() => {
// DOM元素将在初始渲染后分配给ref
console.log(root.value) // <div>这是根元素</div>
})
return {
root
}
}
}
</script>
这里我们在渲染上下文中暴露 root
,并通过 ref="root"
,将其绑定到 div 作为其 ref。在虚拟 DOM 补丁算法中,如果 VNode 的 ref
键对应于渲染上下文中的 ref,则 VNode 的相应元素或组件实例将被分配给该 ref 的值。这是在虚拟 DOM 挂载/打补丁过程中执行的,因此模板引用只会在初始渲染之后获得赋值。
作为模板使用的 ref 的行为与任何其他 ref 一样:它们是响应式的,可以传递到 (或从中返回) 复合函数中。
export default {
setup() {
const root = ref(null)
return () =>
h("div", {
ref: root
})
// with JSX
return () => <div ref={root} />
}
}
v-for
中的用法
组合式 API 模板引用在 v-for
内部使用时没有特殊处理。相反,请使用函数引用执行自定义处理:
<template>
<div v-for="(item, i) in list" :ref="el => { if (el) divs[i] = el }">
{{ item }}
</div>
</template>
<script>
import { ref, reactive, onBeforeUpdate } from "vue"
export default {
setup() {
const list = reactive([1, 2, 3])
const divs = ref([])
// 确保在每次更新之前重置ref
onBeforeUpdate(() => {
divs.value = []
})
return {
list,
divs
}
}
}
</script>
#官方 Router对于大多数单页面应用,都推荐使用官方支持的 vue-router 库。更多细节可以移步 vue-router 文档。#从零开始简单的...
#SSR 完全指南我们创建了一份完整的构建 Vue 服务端渲染应用的指南。这份指南非常深入,适合已经熟悉 Vue、webpack 和 Node.js ...
#概览以下是对变化的高层次概述:新的 defineAsyncComponent 助手方法,用于显式地定义异步组件component 选项重命名为 loaderLo...
#概览在 Vue 3 中,组件现在正式支持多根节点组件,即片段!#2.x 语法在 2.x 中,不支持多根组件,当用户意外创建多根组件时会发...
#概览新增:对于 v-if/v-else/v-else-if的各分支项key将不再是必须的,因为现在 Vue 会自动生成唯一的key。非兼容:如果你手动提...