← 返回文章列表
Vue·2274 次阅读

Vue 2 迁移 Vue 3(二):Composition API 与逻辑复用

Vue 2 迁移 Vue 3(二):Composition API 与逻辑复用

选项映射表

迁移时大部分选项都有直接对应:

Vue 2 Options API Vue 3 Composition
data 属性 ref() / reactive()
computed computed()
watch 选项 / $watch watch() / watchEffect()
methods 普通函数
mounted onMounted()
beforeDestroy onBeforeUnmount()
this.$emit setup(props, { emit })
provide/inject provide() / inject()

setup 里没有 this,所有东西先声明再使用。

mixin → 组合式函数

以一个分页 mixin 为例,迁移后变成一个普通函数,数据来源一目了然:

// Vue 2:mixin 悄悄注入 page、fetchData,多了根本不知道谁是谁
export default {
  data() { return { page: 1, list: [] } },
  methods: { fetchData() { /* this.page ... */ } },
}

// Vue 3:useXxx 函数,返回什么用什么
function usePagination(fetcher) {
  const page = ref(1)
  const list = ref([])
  const loading = ref(false)

  async function fetchData() {
    loading.value = true
    list.value = await fetcher(page.value)
    loading.value = false
  }
  watch(page, fetchData) // 页码变化自动重新请求
  onMounted(fetchData)

  return { page, list, loading, fetchData }
}

// 组件里:
const { page, list, loading } = usePagination((p) =>
  fetch('/api/posts?page=' + p).then(r => r.json())
)

好处:可显式传参(fetcher)、可重名时直接改名解构、类型自动推导、可在任何组件里复用且来源清晰。

迁移策略建议

不必一次性重写所有组件——Vue 3 允许 Options API 与 Composition API 共存。推荐节奏:

  1. 新组件、新逻辑一律用 <script setup>
  2. 旧组件中复用频繁、逻辑复杂的优先改造(收益最大)
  3. 纯展示的简单组件保持 Options API 也完全没问题

改造时先抽组合式函数,再把组件里的选项逐个替换,每改一个组件跑一遍回归,风险可控。

看到这里了?如果这篇文章帮到过你

请我喝瓶可乐就好 🥤

收款码

评论0 条

还没有评论,来抢沙发~

发表评论

评论需审核后显示

© 2026 许冬博客 · 专注 JS 技术分享

·RSS 订阅·Powered by Nuxt 4