setup语法糖和setup函数有什么区别

正常开发大家使用vue3一般都会使用setup语法糖,那么setup语法糖到底做了什么,和setup函数有什么区别 首先分别用setup语法糖和setup函数各写一个功能一样的组件

组件A setup语法糖实现

js 复制代码
<template>
  <div>
    <p>setup语法糖</p>
    <p>当前计数: {{ count }}</p>
    <el-button type="primary" @click="increment">增加</el-button>
    <el-button type="danger" @click="decrement">减少</el-button>
  </div>
</template>
<script setup lang="ts">
//写个累加器
import {ref} from "vue";
const count = ref(0)
const increment = () => {
  count.value++;
};

// 定义减少函数
const decrement = () => {
  count.value--;
};

</script>
<style scoped lang="scss">

</style>

组件B setup函数实现

xml 复制代码
<template>
  <div>
    <p>setup函数</p>
    <p>当前计数: {{ count }}</p>
    <el-button type="primary" @click="increment">增加</el-button>
    <el-button type="danger" @click="decrement">减少</el-button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    // 创建一个响应式计数器变量
    const count = ref(0);

    // 定义增加函数
    const increment = () => {
      count.value++;
    };

    // 定义减少函数
    const decrement = () => {
      count.value--;
    };

    // 返回响应式变量和函数
    return {
      count,
      increment,
      decrement
    };
  }
};
</script>

<style>
/* 这里可以添加样式 */
</style>

然后分别引用组件A和B

xml 复制代码
<template>
  <A ref="refsetup"></A>
  <B ref="refscriptsetup"></B>
</template>
<script setup lang="ts">
import A  from './A.vue';
import B  from './B.vue';
const refsetup = ref(null)
const refscriptsetup = ref(null)
import {ref,onMounted} from "vue";
onMounted(()=>{
  console.log(refsetup);
  console.log(refscriptsetup);
})

</script>
<style scoped lang="scss">

</style>

效果如下

代码可以看到我们分别打印了组件A和B的ref 打印结果如下

很容易发现setup语法糖的ref并没有什么东西 ,通过查看查看编译后的结果我们发现,setup函数编译的结果是原封不动的,返回什么,编译后还是返回什么

而setup语法糖呢 编译后多了个expose

这个是vue3新增的一个api 作用就是可以指定想要暴露的对象 不写就默认暴露全部 如果只希望暴露指定属性可以用 defineExpose

编译后

这样就不存在在外部可以使用ref来改变内部数据的可能,也可以通过暴露子组件内部方法,父组件可以直接调用

相关推荐
Hilaku9 分钟前
我用AI重构了一段500行的屎山代码,这是我的Prompt和思考过程
前端·javascript·架构
IT_陈寒35 分钟前
Vite性能优化实战:5个被低估的配置让你的开发效率提升50%
前端·人工智能·后端
IT_陈寒37 分钟前
Java性能调优的7个被低估的技巧:从代码到JVM全链路优化
前端·人工智能·后端
掘金安东尼1 小时前
前端周刊第439期(2025年11月3日–11月9日)
前端·javascript·vue.js
码农刚子1 小时前
ASP.NET Core Blazor进阶1:高级组件开发
前端·前端框架
道可到1 小时前
重新审视 JavaScript 中的异步循环
前端
起这个名字2 小时前
微前端应用通信使用和原理
前端·javascript·vue.js
QuantumLeap丶2 小时前
《uni-app跨平台开发完全指南》- 06 - 页面路由与导航
前端·vue.js·uni-app
CSharp精选营2 小时前
ASP.NET Core Blazor进阶1:高级组件开发
前端·.net core·blazor
用户90443816324602 小时前
AI 生成的 ES2024 代码 90% 有坑!3 个底层陷阱 + 避坑工具,项目 / 面试双救命
前端·面试