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">
相关推荐
世界哪有真情8 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
鱼樱前端9 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
Listen·Rain9 小时前
Vue3:setup详解
前端·javascript·vue.js
Patrick_Wilson10 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
kyriewen10 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
小粉粉hhh11 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js
Csvn11 小时前
🤖 AI 生成前端代码的 5 个典型翻车现场及修复指南
前端
IT_陈寒12 小时前
SpringBoot自动装配坑了我一天,原来问题出在这
前端·人工智能·后端
索西引擎13 小时前
【React】key 属性:协调算法中的元素标识机制与最佳实践
前端·javascript·react.js
只会cv的前端攻城狮13 小时前
动态组件架构设计:从配置到事件驱动全链路解析
前端·vue.js