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

相关推荐
祝余呀6 分钟前
html初学者第一天
前端·html
耶啵奶膘3 小时前
uniapp+firstUI——上传视频组件fui-upload-video
前端·javascript·uni-app
视频砖家3 小时前
移动端Html5播放器按钮变小的问题解决方法
前端·javascript·viewport功能
lyj1689974 小时前
vue-i18n+vscode+vue 多语言使用
前端·vue.js·vscode
小白变怪兽5 小时前
一、react18+项目初始化(vite)
前端·react.js
ai小鬼头5 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
墨菲安全6 小时前
NPM组件 betsson 等窃取主机敏感信息
前端·npm·node.js·软件供应链安全·主机信息窃取·npm组件投毒
GISer_Jing6 小时前
Monorepo+Pnpm+Turborepo
前端·javascript·ecmascript
天涯学馆6 小时前
前端开发也能用 WebAssembly?这些场景超实用!
前端·javascript·面试
我在北京coding7 小时前
TypeError: Cannot read properties of undefined (reading ‘queryComponents‘)
前端·javascript·vue.js