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">
相关推荐
90后的晨仔17 分钟前
在macOS上无缝整合:为Claude Code配置魔搭社区免费API完全指南
前端
沿着路走到底1 小时前
JS事件循环
java·前端·javascript
子春一21 小时前
Flutter 2025 可访问性(Accessibility)工程体系:从合规达标到包容设计,打造人人可用的数字产品
前端·javascript·flutter
白兰地空瓶1 小时前
别再只会调 API 了!LangChain.js 才是前端 AI 工程化的真正起点
前端·langchain
jlspcsdn2 小时前
20251222项目练习
前端·javascript·html
一 乐2 小时前
酒店预约|基于springboot + vue酒店预约系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
行走的陀螺仪3 小时前
Sass 详细指南
前端·css·rust·sass
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ3 小时前
React 怎么区分导入的是组件还是函数,或者是对象
前端·react.js·前端框架
LYFlied3 小时前
【每日算法】LeetCode 136. 只出现一次的数字
前端·算法·leetcode·面试·职场和发展
子春一23 小时前
Flutter 2025 国际化与本地化工程体系:从多语言支持到文化适配,打造真正全球化的应用
前端·flutter