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来改变内部数据的可能,也可以通过暴露子组件内部方法,父组件可以直接调用

相关推荐
LiuJun2Son12 分钟前
Angular 快速入门:从零搭建你的第一个应用
前端·javascript·angular.js
小徐_233320 分钟前
Wot UI 2.1.0 发布:ConfigProvider 全局配置能力升级
前端·uni-app
方白羽21 分钟前
Vibe Coding 四个核心阶段
android·前端·app
奶油话梅糖21 分钟前
浏览器解析 HTML 头部的底层逻辑:从字节流到资源调度
前端·html
YHL21 分钟前
🚀从零理解树与二叉树 —— 概念、实现与遍历
前端·javascript·数据结构
小时前端23 分钟前
微前端技术选型深度分析:从概念到实践
前端
wyhwust37 分钟前
基于Apifox的接口管理工具
前端
柒和远方1 小时前
后端认证、鉴权、高并发:从 Session 到 JWT 再到 Redis
前端·后端·面试
piglet121381 小时前
把搜索调到 Claude.ai 的水准
前端·人工智能
前端Hardy1 小时前
前端圈沸腾!这个动画库月下载超 3000 万次,已经快成行业标准了
前端