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

相关推荐
尘世中一位迷途小书童2 小时前
用 Cesium 撸了一个森林火情监控大屏,弧线、粒子、发光效果都齐了
前端·javascript
IT_陈寒2 小时前
垃圾回收器选错了,我的Java服务内存炸了
前端·人工智能·后端
月光下的丝瓜3 小时前
Flutter 国内安装指南
前端·flutter
玄星啊3 小时前
AI 编程的第 30 天,我怀念古法 Coding 了
前端·ai编程
Jolyne_3 小时前
Angular基础速通
前端·angular.js
锋行天下4 小时前
半秒开!还有谁!!!
前端·vue.js·架构
代码搬运媛5 小时前
git 下中文文件名乱码问题解决
前端
CaffeinePro5 小时前
告别知识点零散!React零基础通关,从环境搭建到Ant Design页面实战
前端·react.js
cidy_986 小时前
水龙头领不到测试币?手把手用 Hardhat 本地环境零门槛学以太坊交易
前端
因_崔斯汀6 小时前
Three.js 3D 地图特效与材质实现指南
前端