渐进式 JavaScript 框架 Vue 3 备忘清单的快速参考列表,包含常用 API 和示例。
Vue 是一套用于构建用户界面的渐进式框架
注意:Vue 3.x 版本对应 Vue Router 4.x 路由版本
已安装 16.0
或更高版本的 Node.js
指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具
✔ Project name: … <your-project-name>
✔ Add TypeScript? … No/Yes
✔ Add JSX Support? … No/Yes
✔ Add Vue Router for Single Page Application development? … No/Yes
✔ Add Pinia for state management? … No/Yes
✔ Add Vitest for Unit testing? … No/Yes
✔ Add Cypress for both Unit and End-to-End testing? … No/Yes
✔ Add ESLint for code quality? … No/Yes
✔ Add Prettier for code formatting? … No/Yes
Scaffolding project in ./<your-project-name>...
Done.
安装依赖并启动开发服务器
$ cd <your-project-name>
$ npm install
$ npm run dev
当你准备将应用发布到生产环境时,请运行:
此命令会在 ./dist
文件夹中为你的应用创建一个生产环境的构建版本
import { createApp } from 'vue'
const app = createApp({
data() {
return { count: 0 }
}
})
app.mount('#app')
挂载应用
<div id="app">
<button @click="count++">
{{ count }}
</button>
</div>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">{{ message }}</div>
<script>
const { createApp } = Vue
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
<div id="app">{{ message }}</div>
<script type="module">
import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
createApp({
data() {
return {
message: 'Hello Vue!'
}
}
}).mount('#app')
</script>
<span>Message: {{ msg }}</span>
使用的是 Mustache
语法 (即双大括号),每次 msg
属性更改时它也会同步更新
<p>Using text interpolation: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
双大括号{{}}
会将数据解释为纯文本,使用 v-html
指令,将插入 HTML
<div v-bind:id="dynamicId"></div>
简写
<div :id="dynamicId"></div>
<button :disabled="isButtonDisabled">
Button
</button>
data() {
return {
objectOfAttrs: {
id: 'container',
class: 'wrapper'
}
}
}
通过不带参数的 v-bind
,你可以将它们绑定到单个元素上
<div v-bind="objectOfAttrs"></div>
{{ number + 1 }}
{{ ok ? 'YES' : 'NO' }}
{{ message.split('').reverse().join('') }}
<div :id="`list-${id}`"></div>
<!-- 这是一个语句,而非表达式 -->
{{ var a = 1 }}
<!-- 条件控制也不支持,请使用三元表达式 -->
{{ if (ok) { return message } }}
<span :title="toTitleDate(date)">
{{ formatDate(date) }}
</span>
<p v-if="seen">Now you see me</p>
<a v-bind:href="url"> ... </a>
<!-- 简写 -->
<a :href="url"> ... </a>
<a v-on:click="doSomething"> ... </a>
<!-- 简写 -->
<a @click="doSomething"> ... </a>
<a v-bind:[attributeName]="url"> ... </a>
<!-- 简写 -->
<a :[attributeName]="url"> ... </a>
这里的 attributeName
会作为一个 JS 表达式被动态执行
<a v-on:[eventName]="doSomething"> ... </a>
<!-- 简写 -->
<a @[eventName]="doSomething">
<form @submit.prevent="onSubmit">
...
</form>
.prevent
修饰符会告知 v-on
指令对触发的事件调用 event.preventDefault()
v-on:submit.prevent="onSubmit"
──┬─ ─┬──── ─┬───── ─┬──────
┆ ┆ ┆ ╰─ Value 解释为JS表达式
┆ ┆ ╰─ Modifiers 由前导点表示
┆ ╰─ Argument 跟随冒号或速记符号
╰─ Name 以 v- 开头使用速记时可以省略
export default {
data() {
return {
count: 0
}
},
}
<button @click="increment">
{{ count }}
</button>
export default {
data() {
return {
count: 0
}
},
methods: {
increment() {
this.count++
}
}
}
import { debounce } from 'lodash-es'
export default {
created() {
// 每个实例都有了自己的预置防抖的处理函数
this.debouncedClick = debounce(this.click, 500)
},
unmounted() {
// 最好是在组件卸载时
// 清除掉防抖计时器
this.debouncedClick.cancel()
},
methods: {
click() {
// ... 对点击的响应 ...
}
}
}
:- |
:- |
createApp() |
# |
createSSRApp() |
# |
app.mount() |
# |
app.unmount() |
# |
app.provide() |
# |
app.component() |
# |
app.directive() |
# |
app.use() |
# |
app.mixin() |
# |
app.version |
# |
app.config |
# |
app.config.errorHandler |
# |
app.config.warnHandler |
# |
app.config.performance |
# |
app.config.compilerOptions |
# |
app.config.globalProperties |
# |
app.config.optionMergeStrategies |
# |
:- |
:- |
version |
# |
nextTick() |
# |
defineComponent() |
# |
defineAsyncComponent() |
# |
defineCustomElement() |
# |
:- |
:- |
基本使用 |
# |
访问 Props |
# |
Setup 上下文 |
# |
与渲染函数一起使用 |
# |
:- |
:- |
isRef() |
# |
unref() |
# |
toRef() |
# |
toRefs() |
# |
isProxy() |
# |
isReactive() |
# |
isReadonly() |
# |
:- |
:- |
onMounted() |
组件挂载完成后执行 # |
onUpdated() |
状态变更而更新其 DOM 树之后调用 # |
onUnmounted() |
组件实例被卸载之后调用 # |
onBeforeMount() |
组件被挂载之前被调用 # |
onBeforeUpdate() |
状态变更而更新其 DOM 树之前调用 # |
onBeforeUnmount() |
组件实例被卸载之前调用 # |
onErrorCaptured() |
捕获了后代组件传递的错误时调用 # |
onRenderTracked() |
组件渲染过程中追踪到响应式依赖时调用 # |
onRenderTriggered() |
响应式依赖的变更触发了组件渲染时调用 # |
onActivated() |
若组件实例是 <KeepAlive> 缓存树的一部分,当组件被插入到 DOM 中时调用 # |
onDeactivated() |
若组件实例是 <KeepAlive> 缓存树的一部分,当组件从 DOM 中被移除时调用 # |
onServerPrefetch() |
组件实例在服务器上被渲染之前调用 # |
:- |
:- |
provide() |
# |
inject() |
# |
:- |
:- |
ref() |
# |
computed () |
# |
reactive() |
# |
readonly() |
# |
watchEffect() |
# |
watchPostEffect() |
# |
watchSyncEffect() |
# |
watch() |
# |
:- |
:- |
data |
# |
props |
# |
computed |
# |
methods |
# |
watch |
# |
emits |
# |
expose |
# |
:- |
:- |
beforeCreate |
# |
created |
# |
beforeMount |
# |
mounted |
# |
beforeUpdate |
# |
updated |
# |
beforeUnmount |
# |
unmounted |
# |
errorCaptured |
# |
renderTracked |
# |
renderTriggered |
# |
activated |
# |
deactivated |
# |
serverPrefetch |
# |
:- |
:- |
name |
显式声明组件展示时的名称 # |
inheritAttrs |
默认的组件 attribute 透传行为 # |
components |
# |
directives |
# |
:- |
:- |
template |
# |
render |
# |
compilerOptions |
# |
:- |
:- |
$data |
# |
$props |
# |
$el |
# |
$options |
# |
$parent |
# |
$root |
# |
$slots |
# |
$refs |
# |
$attrs |
# |
$watch() |
# |
$emit() |
# |
$forceUpdate() |
# |
$nextTick() |
# |
:- |
:- |
provide |
# |
inject |
# |
mixins |
# |
extends |
# |
:- |
:- |
v-text |
# |
v-html |
# |
v-show |
# |
v-if |
# |
v-else |
# |
v-else-if |
# |
v-for |
# |
v-on |
# |
v-bind |
# |
v-model |
# |
v-slot |
# |
v-pre |
# |
v-once |
# |
v-memo |
# |
v-cloak |
# |
:- |
:- |
<Transition> |
# |
<TransitionGroup> |
# |
<KeepAlive> |
# |
<Teleport> |
# |
<Suspense> |
# |
:- |
:- |
<component> |
# |
<slot> |
# |
:- |
:- |
总览 |
# |
相应语言块 |
# |
自动名称推导 |
# |
预处理器 |
# |
Src 导入 |
# |
注释 |
# |
:- |
:- |
基本语法 |
# |
响应式 |
# |
使用组件 |
# |
使用自定义指令 |
# |
defineProps() 和 defineEmits() |
# |
defineExpose |
# |
useSlots() 和 useAttrs() |
# |
与普通的 <script> 一起使用 |
# |
顶层 await |
# |
针对 TypeScript 的功能 |
# |
限制 |
# |
:- |
:- |
组件作用域 CSS |
# |
CSS Modules |
# |
CSS 中的 v-bind() |
# |
:- |
:- |
h() |
# |
mergeProps() |
# |
cloneVNode() |
# |
isVNode() |
# |
resolveComponent() |
# |
resolveDirective() |
# |
withDirectives() |
# |
withModifiers() |
# |
:- |
:- |
renderToString() |
# |
renderToNodeStream() |
# |
pipeToNodeWritable() |
# |
renderToWebStream() |
# |
pipeToWebWritable() |
# |
renderToSimpleStream() |
# |
useSSRContext() |
# |
:- |
:- |
PropType<T> |
# |
ComponentCustomProperties |
# |
ComponentCustomOptions |
# |
ComponentCustomProps |
# |
CSSProperties |
# |