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">
相关推荐
陈随易14 分钟前
2年没用Nodejs了,Bun很香
前端·后端·程序员
donecoding30 分钟前
Corepack 完全解析:从懵到懂,包管理器自由了
前端·node.js·前端工程化
yqcoder33 分钟前
端经典面试题:为什么 0.1 + 0.2 !== 0.3?
前端·css
ZC跨境爬虫38 分钟前
跟着 MDN 学 HTML day_12:(HTML网页图片嵌入)
前端·javascript·css·ui·html
光影少年44 分钟前
reeact虚拟DOM、Diff算法原理、key的作用与为什么不能用index
前端·react.js·掘金·金石计划
用户059540174461 小时前
大模型记忆存储踩坑实录:LangChain 的 ConversationBufferMemory 让我排查了 6 小时
前端·css
是上好佳佳佳呀1 小时前
【前端(十二)】JavaScript 函数与对象笔记
前端·javascript·笔记
你真的快乐吗1 小时前
@fuxishi/svg-icon:一个 Vue 3 svg本地图标+iconify图标组件库,让图标管理不再头疼
前端·vue.js·typescript
Rkgua1 小时前
ESModule和Commonjs模块的区别
前端·javascript
江南十四行1 小时前
ReAct Agent 基本理论与项目实战(二)
前端·react.js·前端框架