千家信息网

怎么使用vue3的setup()

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"怎么使用vue3的setup()",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么使用vue3的setup()"吧!从 vue2 升级到
千家信息网最后更新 2026年11月01日怎么使用vue3的setup()

本篇内容主要讲解"怎么使用vue3的setup()",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么使用vue3的setup()"吧!

    从 vue2 升级到 vue3,vue3 是可以兼容 vue2 的,所以 vue3 可以采用 vue2 的选项式API。由于选项式API一个变量存在于多处,如果出现问题时,就需要去多个函数内检查,项目较大时,遇到问题,增加排故的难度。所以 vue3 中新增了 setup 配置项,用它来写组合式API。

    一、选项式API 和 组合式API 区别

    有些同学稀里糊涂用了vue一年了,竟然不知道选项式api !你是那个同学吗?是的话,赶紧收藏起来。

    vue2 中的 Options API 就是选项式api,一个中文,一个英文,怎么叫都可以。

    在一个 vue 文件内,会有 data、methods、mounted、computed、watch 等等用来定义属性和方法,共同来处理页面逻辑,我们把这种方式称为 Options API。

    示例1:计数器

    观察上述示例,我们发现 num 值的处理涉及到 data 和 methods 两个选项,业务处理的比较分散,项目小了看着清晰明了,但是项目变大之后,data 和 methods会包含很多属性和方法,此时就很难分清哪个属性对应哪个方法。所以 vue3 新增 setup 写组合式API。

    Vue3 的 Composition API 就是组合式api。

    组合式api 就是一个功能所定义的 api 会放在一起,这样子即使项目变大,功能增大,我们能够很快找到功能相关的所有api,不像 Options API 功能分散,需要改动时,需要多处查找过程比较困难。

    示例2:计数器

    ref 是让基础数据类型具备响应式的,下篇文章具体介绍它的用法,需要的同学可以点个关注不迷路!

    用一张图告诉你它们的区别:

    二、setup 具体怎么用?

    2.1、setup 什么时候执行?

    setup 用来写组合式 api,从生命周期钩子函数角度分析,相当于取代了 beforeCreate 。会在 creted 之前执行。

    执行之后,setup 打印结果始终在前边。

    2.2、setup 数据和方法如何使用?

    示例3:直接定义使用变量

    运行后发现结果异常:

    runtime-core.esm-bundler.js?5c40:6584 [Vue warn]: Property "a" was accessed during render but is not defined on instance.

    提示我们访问的属性 a 并没有挂载到实例上。

    setup 内部的属性和方法,必须 return 暴露出来,将属性挂载到实例上,否则没有办法使用,上述代码添加return:

    2.3、setup 内部有 this 吗?

    自己在 setup 中打印下 this ,返回结果 是undefined 。说明在 setup 内部是不存在 this ,不能挂载 this 相关的东西。

    2.4、setup 内钩子函数如何使用?

    vue3 是可以兼容 vue2 的选项式写法,所以 钩子函数可以与 setup 并列存在,就相当于 Options API。

    示例4:

    export default{ setup(){  console.log('setup'); }, mounted(){  console.log('mounted'); }}

    vue3 新增的 setup() 函数用来写组合式 api,所以不建议这样写代码。所以需要使用 onXXX 一族的函数来注册钩子函数,注册成功之后调用时传递的是一个回调函数。

    示例5:

    import { onMounted } from "vue";export default{ setup(){  const a = 0  return{   a  },  onMounted(()=>{   console.log("执行"); }) }}

    注册的这些生命周期钩子函数只能在 setup 期间同步使用,因为它们依赖全局内部状态来定位当前组件实例,不在当前组件下调用函数时会抛出错误。

    其他的钩子函数是一样的,根据需要引入就好了。

    2.5、setup与钩子函数关系

    setup 与钩子函数并列时,setup 不能调用生命周期相关函数,但生命周期可以调用 setup 相关的属性和方法。

    示例6:

    this.$options.setup() 返回的是一个大对象,该对象内包含了 setup 内的所有属性和方法。

    三、setup 参数

    使用setup 时,它将接收两个参数:props 和 context 。

    3.1、props

    第一个参数是 props ,表示父组件给子组件传值,props 是响应式的,当传入新的 props 时,自动更新。

    示例7:

    export default{ props: {  msg: String,  ans: String, }, setup(props,context){  console.log(props);//Proxy {msg: "着急找对象", ans: "你有对象吗?"} },}

    因为 props 是响应式的,不能使用 ES6 解构,会消除prop的响应特性,此时需要借用 toRefs 解构。示例8:

    import { toRefs } from "vue"; export default{  props: {   msg: String,   ans: String,  },  setup(props,context){   console.log(props);   const { msg,ans } = toRefs(props)   console.log(msg.value); //着急找对象   console.log(ans.value); //你有对象吗?  }, }

    使用组件时,经常会遇到可选参时,有些地方需要传递某个值,有些时候不需要,该如何处理呢?

    如果 ans 是一个可选参数,则传入 props 中可能没有 ans 。在这种情况下 toRefs 将不会为 ans 创建一个 ref ,需要使用 toRef 代替它。

    import { toRef } from "vue";setup(props,context){ let ans  = toRef(props ,'ans')// 不存在时,创建一个ans console.log(ans.value);}

    3.2、context

    context 上下文环境,其中包含了 属性、插槽、自定义事件三部分。

    setup(props,context){ const { attrs,slots,emit } = context // attrs 获取组件传递过来的属性值, // slots 组件内的插槽 // emit 自定义事件 子组件}

    attrs 是一个非响应式对象,主要接收 no-props 属性,经常用来传递一些样式属性。

    slots 是一个 proxy 对象,其中 slots.default() 获取到的是一个数组,数组长度由组件的插槽决定,数组内是插槽内容。

    setup 内不存在this,所以 emit 用来替换 之前 this.$emit 的,用于子传父时,自定义事件触发。

    示例9:

    到此,相信大家对"怎么使用vue3的setup()"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    属性 函数 示例 组件 对象 方法 钩子 插槽 组合 功能 参数 周期 数组 生命 项目 事件 内容 同学 实例 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安纸贵互联网科技有限公司 中资互联网科技 互联网络科技有限公司 善班互联网科技有限公司 互联网 视角下的科技创新 甘肃拓世互联网科技有限公司 哈尔滨新华互联网科技学院 温州喔噻互联网科技有限公司 剑昆互联网络科技有限公司临桂 互联网科技产业特征 洛阳昕诺飞互联网科技有限公司 互联网科技扶贫时间 乌鲁木齐新华智原互联网科技学校 滨湖区互联网智能科技产品有哪些 黑科技 体验场景 互联网大会 小米互联网科技园入驻 中国互联网有什么科技 本届互联网大会上的黑科技 北京天晋互联网科技有限公司 恒生科技互联网指数十大成分股 互联网科技海报 广东猪兼强互联网科技有限公司 互联网和科技创新 重庆互联网络科技 中和天地互联网科技有限公司 工业互联网山东科技大学 从那以后互联网科技有限公司 扫呗互联网科技有限公司 科技信息时代互联网发展 三亚科技创新互联网基地
    0