Vue.js 语法速查表 - Vue 3 常用 API 与组合式编程大全

这张速查面向使用 Vue 3 组合式 API 与 <script setup> 写产品的开发者。内容从响应式基础(ref 与 reactive 的区别)讲到 computed 与 watch,再到 props/emits/provide-inject 的跨组件通信,接着覆盖路由、Pinia 状态管理和模板语法,最后是用 shallowRef、defineAsyncComponent 做性能优化。每条都是能直接贴进现有 SFC 并立刻看到响应式效果的片段。读完你应能用 ref/reactive 管理本地状态、用 watch 响应变化、打通父子组件的数据往来,并给大列表和重组件做懒加载。

编程语言·共 46 条命令·最后更新 2026-07-21

响应式基础 8

const count = ref(0)
把基本数字 0 变成响应式,脚本里读写都经 count.value
count.value++
改 ref 值(脚本中需 .value,模板里自动解包)
const state = reactive({ name: "Vue" })
让对象每个属性都响应式,可直接属性访问
const doubled = computed(() => count.value * 2)
由其他状态推导的只读值,依赖变化时自动重算
const w = computed({ get: () => v.value, set: (x) => (v.value = x) })
可写计算属性
watch(count, (n, o) => {}, { immediate: true })
侦听 ref 变化,(n, o) 是新旧值;immediate 让初始立刻触发一次
watchEffect(() => console.log(count.value))
自动追踪回调里用到的依赖,任一变化即重跑
const { name } = toRefs(state)
把响应式对象解构成一个个 ref,保留响应性

生命周期 6

onBeforeMount(() => {})
挂载前,此时 DOM 还未生成
onMounted(() => {})
挂载后,DOM 已就绪,常用于发请求或操作 DOM
onBeforeUpdate(() => {})
响应式数据变化导致重渲前触发
onUpdated(() => {})
重渲染完成之后触发
onBeforeUnmount(() => {})
卸载前调用,适合清理定时器与事件监听
onUnmounted(() => {})
组件彻底卸载后触发

组件通信 6

defineProps<{ msg: string }>()
声明 props(类型方式)
const emit = defineEmits(["change"])
声明向父组件发送的事件
defineExpose({ method() {} })
暴露方法给父组件 ref
provide("theme", "dark")
向后代组件注入数据
const theme = inject("theme", "light")
接收注入并设置默认值
const model = defineModel<string>()
双向绑定(Vue 3.4+)

组合式函数 5

function useCounter(n = 0) { const c = ref(n); return { c, inc: () => c.value++ } }
自定义计数器钩子
const { c, inc } = useCounter(10)
使用自定义组合式函数
function useMouse() { const x = ref(0); const y = ref(0); return { x, y } }
封装鼠标位置
function useEventListener(el, ev, cb) { onUnmounted(() => el.removeEventListener(ev, cb)) }
封装事件监听并自动清理
function useFetch(url) { /* return { data, error, loading } */ }
封装异步请求

路由与状态 7

const route = useRoute()
获取当前路由信息
const router = useRouter()
获取路由实例
router.push("/users")
编程式跳转
router.replace("/login")
替换路由(不留历史)
const store = useCounterStore()
获取 Pinia store
const { count } = storeToRefs(store)
解构 store 状态保持响应式
store.$patch({ count: 1 })
批量更新 store 状态

模板语法 8

{{ message }}
文本插值
:href="url"
属性绑定(v-bind 缩写)
@click="handler"
事件绑定(v-on 缩写)
v-model="form.name"
双向绑定
v-if / v-else-if / v-else
条件渲染
v-for="item in list" :key="item.id"
列表渲染(必须加 key)
<Teleport to="body">
将内容传送到指定 DOM 节点
<slot name="header" />
具名插槽

性能优化 6

const list = shallowRef([])
浅响应式(大对象/大列表优化)
markRaw(obj)
标记对象永不响应式
v-memo="[a, b]"
模板记忆(Vue 3.2+)
defineAsyncComponent(() => import("./Comp.vue"))
异步组件懒加载
<KeepAlive include="UserList">
缓存组件实例状态
<Suspense>
协调异步组件加载

提示

  • ref 用于基本类型,reactive 用于对象;ref 在脚本中需 .value 访问,模板中自动解包。
  • computed 有缓存只在依赖变化时重算;watch 默认懒执行,加 immediate: true 可立即触发一次。
  • defineProps、defineEmits、defineExpose、defineModel 是编译器宏,无需 import 即可使用。
  • 解构 reactive 对象会丢失响应式,用 toRefs 包装后再解构可保持响应式。
  • 大列表用 shallowRef + v-memo,路由组件用 defineAsyncComponent 懒加载可提升性能。

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们