news 2026/10/15 6:53:56

后端开发也能搞定 Vue3?从“类与对象”的角度通过 30 分钟看懂 Composition API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端开发也能搞定 Vue3?从“类与对象”的角度通过 30 分钟看懂 Composition API

☕ 前言:为什么后端以前讨厌写前端?

作为后端开发,我们习惯了类 (Class)、对象 (Object)、封装 (Encapsulation)和依赖注入 (DI)。
当我们看到 Vue2 的代码时,内心是崩溃的:

  • 满屏的this:这个this到底指的是 Window 还是实例?
  • 代码割裂:实现一个“搜索”功能,变量要写在data里,逻辑要写在methods里,监听要写在watch里。屏幕滚来滚去,逻辑支离破碎。

Vue3 的 Composition API(组合式 API)简直就是后端开发者的福音。
别被这个高大上的名字吓到了。在后端眼里,它本质上就是把页面逻辑写成了“Java 类”!

今天,我们忘掉前端术语,用OOP 的视角重新认识 Vue3。


🧩 核心映射:Vue3 就是在写 Class

在 Java/Spring 中,我们写一个业务组件通常是这样的:

publicclassCounterService{// 1. 私有成员变量 (State)privateintcount=0;// 2. 构造函数/初始化 (Init)publicCounterService(){System.out.println("初始化...");}// 3. Getter 方法 (Computed)publicintgetDoubleCount(){returncount*2;}// 4. 公共方法 (Methods)publicvoidincrement(){this.count++;}}

现在,请看 Vue3 (<script setup>) 的写法:

<script setup>import{ref,computed,onMounted}from'vue';// 1. 成员变量 (ref = private field)constcount=ref(0);// 2. 初始化 (onMounted = PostConstruct)onMounted(()=>{console.log("初始化...");});// 3. Getter 方法 (computed)constdoubleCount=computed(()=>count.value*2);// 4. 公共方法 (function = method)constincrement=()=>{count.value++;// 注意:JS里修改引用类型要用 .value};</script>

发现了吗?完全一一对应!
Vue3 终于允许我们将相关的变量和方法写在一起了,这就是“高内聚” (High Cohesion)。


🧱 进阶:Hooks 就是 Service 层

后端开发最讲究分层架构。Controller 负责接收请求,Service 负责业务逻辑。
在 Vue2 时代,逻辑很难复用(Mixins 是噩梦)。
但在 Vue3 中,我们可以把复杂的逻辑抽离成Hooks (Composables)。

请大声跟我念:Composables 就是前端的 Service 类!

场景:我们需要在多个页面实现“获取用户信息”的功能。

1. 定义 Service (UserHook.js)

这就像你写了一个UserService.java。

// useUser.jsimport{ref,onMounted}from'vue';import{fetchUserApi}from'./api';// 导出这个“Service”exportfunctionuseUser(){// State (DTO)constuserInfo=ref(null);constloading=ref(false);// Method (Service Logic)constgetUser=async(id)=>{loading.value=true;try{userInfo.value=awaitfetchUserApi(id);}finally{loading.value=false;}};// 暴露给外部调用的接口 (Public Interface)return{userInfo,loading,getUser};}

2. 注入 Service (UserProfile.vue)

这就像在 Controller 里@Autowired注入 Service。

<script setup>// 引入 Serviceimport{useUser}from'./hooks/useUser';// 依赖注入 (Dependency Injection)const{userInfo,loading,getUser}=useUser();// 调用方法onMounted(()=>{getUser(1001);});</script><template><div v-if="loading">加载中...</div><div v-else>你好,{{userInfo?.name}}</div></template>

架构图解:

Hook内部逻辑
调用
定义状态
定义行为
监听变化
返回
Ref / Reactive 数据
Composable / Service
Function 方法
Watch / Computed
Vue 组件 / Controller
暴露给组件的对象

⚠️ 后端转 Vue3 的两个“坑”

虽然思想互通,但语法细节上有两个坑,后端同学最容易踩:

1.ref还是reactive?(包装类 vs 原生对象)
  • ref:就像 Java 的Integer、String包装类。它能包装基本类型,也能包装对象。访问值必须加.value。
    • 建议:无脑用ref,虽然多写个.value,但更安全,不会丢失响应性。
  • reactive:就像 Java 的 POJO 对象。不需要.value。
    • 坑:如果你解构它 (const { name } = person), 响应性就丢了(这就好比把对象里的字段复制给了个临时变量,改临时变量不影响原对象)。
2. 生命周期(Hook 方法)

别去背beforeCreate、created了。
在<script setup>中:

  • 代码直接写在根作用域=created(构造函数体)。
  • onMounted=@PostConstruct(DOM 渲染完后执行,类似 Bean 初始化完成)。
  • onUnmounted=@PreDestroy(组件销毁前,做清理工作)。

📝 总结

Vue3 Composition API 的本质,就是把前端开发从“填空题” (Options API)变成了“写作文” (Script Setup)。

对于后端开发者来说,你只需要转变一个观念:

  • 组件 (Component)=类 (Class)
  • Ref 数据=私有字段 (Private Fields)
  • Function=方法 (Methods)
  • Composable=Service 服务类

掌握了这个心法,你会发现 Vue3 的代码结构比 Spring Boot 还要清爽。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 13:13:53

Apache Mesos集群运维实战:故障恢复与版本管理完全指南

Apache Mesos集群运维实战&#xff1a;故障恢复与版本管理完全指南 【免费下载链接】mesos Apache Mesos 项目地址: https://gitcode.com/gh_mirrors/mesos2/mesos 在现代分布式系统中&#xff0c;Mesos集群维护是确保业务连续性的关键环节。本指南将深入解析Mesos集群运…

作者头像 李华
网站建设 2026/10/14 16:13:50

探索式测试的Session管理法:提升软件测试效率与可追溯性

探索式测试作为一种强调测试者自主性与创造性的软件测试方法&#xff0c;在快速迭代的现代开发环境中日益重要。然而&#xff0c;其非结构化的特性可能导致测试过程难以追踪和评估。Session管理法应运而生&#xff0c;它通过引入时间盒&#xff08;Time-boxed&#xff09;会话和…

作者头像 李华
网站建设 2026/10/13 2:27:40

购物省钱参考:爱创猫电商优惠券领取方式

外卖网购“隐形开支”太多&#xff1f;这份极致省钱手册&#xff0c;让你每月轻松多省几百块你有没有算过&#xff0c;自己每个月花在外卖和网购上的钱有多少&#xff1f;打开手机账单&#xff0c;那些十几二十块的外卖订单&#xff0c;几十上百的“凑单”商品&#xff0c;看似…

作者头像 李华
网站建设 2026/10/15 7:26:40

12、Red Hat Enterprise Linux硬件分析与管理指南

Red Hat Enterprise Linux硬件分析与管理指南 1. RPM包安装与信息查看 在安装示例包时,如果未安装 vpnc 包,会显示如下错误: error: Failed dependencies: vpnc is needed by startvpn-1.1-1.noarch若要强制安装该包以测试从示例中构建的软件包,可使用以下命令: r…

作者头像 李华
网站建设 2026/10/14 5:51:05

35、Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析

Linux 内核监控与调试:NUMA、AltSysRq 及 Kdump 全解析 在 Linux 系统的运维和管理中,对内核的监控与调试至关重要。本文将深入探讨 NUMA 统计信息、AltSysRq 系统请求以及 Kdump 内核转储工具的使用,帮助你更好地理解和管理 Linux 内核。 1. NUMA 统计信息 NUMA(Non-Un…

作者头像 李华
网站建设 2026/10/14 1:38:03

DataEase开源BI工具完整指南:从零开始的数据可视化之旅

DataEase开源BI工具完整指南&#xff1a;从零开始的数据可视化之旅 【免费下载链接】DataEase 人人可用的开源 BI 工具 项目地址: https://gitcode.com/feizhiyun/dataease DataEase是一款人人可用的开源BI工具&#xff0c;让数据分析变得简单直观。作为一款基于GPLv3协…

作者头像 李华