vue setup与OptionsAPI

setup 是 vue3 中一个新的配置项,值是一个函数,组件中所用到的:数据、方法、计算属性、监视等等,全配置再setUp中。

特点如下:

  • 生命周期优先级

setup 函数在 beforeCreate 钩子之前自动调用,优先于所有生命周期钩子执行 。 ‌

  • 作用域限制

在 setup 函数中无法使用组件实例(即this),但可通过 getCurrentInstance 获取组件实例 。 ‌setup 函数中的 this 是 undefined,vue3 中已经弱化 this 了。

  • 数据暴露机制

setup返回的对象中的数据和方法可直接在模板中使用,未返回的内容无法访问 。 ‌

  • 参数传递

setup 的第一个参数用于接收父组件传递的 props,支持响应式解构 。 ‌

  • 性能优化

由于在组件实例创建前执行,适合进行异步加载或延迟初始化操作 。 ‌

  • 类型支持

TypeScript 中 setup 函数的返回值能提供更精确的类型推断,提升开发体验 。 ‌

  • 逻辑复用

支持将逻辑拆分为独立函数并组合使用,增强代码复用性和可维护性 。

复制代码
<script  >
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello World!');
    function changeMessage() {
      message.value = 'AAAAA!';
    }
    
    return {
      message,changeMessage
    };
  }
};

</script>

<template>
  <div id="app">{{ message }}</div>
  <button @click="changeMessage">Click me</button>
</template>

<style scoped></style>

setup 的返回值

  • 若返回一个对象:则对象中的:属性、方法等,在模板中均可直接使用。

  • 若返回一个函数:则可以自定义渲染内容,代码如下:

    setup() {
    return ()=>"Hello vue!"
    }

setup和Options API的关系

  • Vue2 的配置(data、methos......)中可以访问到 setup中的属性、方法。
  • 但在setup中不能访问到Vue2的配置(data、methos......)。
  • 如果与Vue2冲突,则setup优先。

setup语法糖

setup 函数有一个语法糖,这个语法糖,可以让我们把 setup 独立出去,代码如下:

复制代码
<script setup lang="ts" >
import { ref } from 'vue';

const message = ref('Hello World!');
function changeMessage() {
  message.value = 'BBB!';
}

</script>

<template>
  <div id="app">{{ message }}</div>
  <button @click="changeMessage">Click me</button>
</template>

<style scoped></style>

扩展:上述代码,你需要确保已经安装了 vite-plugin-vue-setup-extend 插件。如果还没有安装,可以通过 npm 或 yarn 来安装它。

  • 安装插件

    npm install vite-plugin-vue-setup-extend --save-dev

    或者

    yarn add vite-plugin-vue-setup-extend -D

  • 修改Vite配置文件:在vite.config.jsvite.config.ts 文件中,你需要引入并配置该插件。

    import { defineConfig } from 'vite'
    import vueDevTools from 'vite-plugin-vue-devtools'

    // https://vite.dev/config/
    export default defineConfig({
    plugins: [
    vue(),
    vueDevTools(),
    ]
    })

复制代码
  <script setup lang="ts">
相关推荐
小黑技术栈18 小时前
关于前端的一些话
前端
执子念的飞鱼18 小时前
Vue 3 文件预览落地:鉴权 Blob、Worker/WASM 与内网子路径部署
vue.js·webassembly
无人生还18 小时前
从 Vue3 到 React · 快速上手系列第 11 篇:状态管理
前端·vue.js·react.js
GuWenyue18 小时前
90%前端写React TS都踩坑!一套父子组件+Hooks完整实战,彻底搞懂类型约束
前端·react.js
Hilaku19 小时前
当 AI 一天写完一周的代码,我们还剩什么优势?
前端·javascript·程序员
无责任此方_修行中19 小时前
换个版本号就能升级?可没那简单:pnpm 11 升级踩坑记
javascript·后端·npm
尘世中一位迷途小书童19 小时前
无人机航线里的云台角度怎么调?Cesium 做了个视锥 + 鹰眼联动
前端·javascript·数据可视化
张元清19 小时前
React useMeasure Hook:用 ResizeObserver 测量 DOM 元素 (2026)
javascript·react.js
思码梁田19 小时前
CSS display 属性:从元素类型转换到隐藏元素的实用指南
前端·css·display·inline·block·none·inline-block
Csvn19 小时前
⚡ Vite 依赖预构建(optimizeDeps)的 3 个经典坑:改了源码不生效、新增依赖 404、缓存怎么清都不行
前端