基于业务逻辑拆分函数
创作时间:
作者:
@小白创作中心
基于业务逻辑拆分函数
引用
CSDN
1.
https://blog.csdn.net/weixin_57334661/article/details/138618869
在现代前端开发中,合理地拆分和组织代码逻辑对于提高代码的可维护性和复用性至关重要。本文将介绍如何基于业务逻辑拆分函数,通过Vue.js的组合式API(Composition API)来实现组件逻辑的封装和复用。
核心思想
- 逻辑拆分过程是一个拆分再组合的过程
- 将复杂的业务逻辑拆分为更小的、独立的函数模块,如
useBanner和useCategory。 - 每个函数负责处理特定的业务逻辑,并将结果返回给组件使用。
- 函数命名规范
- 以
use开头,表明这是一个用于封装业务逻辑的函数。 - 函数内部封装具体的业务逻辑,并通过
return将组件需要的数据和方法暴露出去。
具体实现步骤
- 声明业务逻辑函数
- 按照业务需求声明以
use开头的逻辑函数。
- 封装独立业务逻辑
- 将独立的业务逻辑封装到各个函数内部。
- 返回所需数据和方法
- 在函数内部将组件中需要用到的数据或方法通过
return返回。
- 组件中调用和组合
- 在组件中调用这些函数,并将返回的数据或方法组合起来使用。
代码示例
useBanner.js
// 封装轮播图业务数据相关代码
import { ref, onMounted } from "vue";
import { getBannerAPI } from "@/apis/home";
// 获取banner数据
export function useBanner() {
const bannerList = ref([]);
const getBanner = async () => {
const res = await getBannerAPI({
distributionSite: "2",
});
bannerList.value = res.result;
};
onMounted(() => {
getBanner();
});
return {
bannerList
}
}
useCategory.js
// 封装分类业务数据相关代码
import { ref, onMounted } from "vue";
import { getCategoryAPI } from "@/apis/category";
import { useRoute, onBeforeRouteUpdate } from "vue-router";
export function useCategory() {
// 获取分类数据
const categoryData = ref({});
const route = useRoute();
const getCategory = async (id = route.params.id) => {
const res = await getCategoryAPI(id);
categoryData.value = res.result;
};
// 页面挂载
onMounted(() => {
getCategory();
});
// 目标:路由参数变化的时候,可以把分类数据接口重新发送
onBeforeRouteUpdate((to) => {
console.log("路由变化了");
// 存在问题:使用最新的路由参数请求最新的分类数据
console.log(to);
getCategory(to.params.id);
});
return {
categoryData
}
}
组件中使用
在需要使用这些数据的组件中,可以通过结构赋值的方式获取数据:
Category/index.vue
<script setup>
import GoodsItem from "../Home/components/GoodsItem.vue";
import { useBanner } from "./composables/useBanner";
import { useCategory } from "./composables/useCategory";
// 获取分类数据
const { categoryData } = useCategory();
// 获取banner数据
const { bannerList } = useBanner();
</script>
<template>
<div class="top-category">
<div class="container m-top-20">
<!-- 面包屑 -->
<div class="bread-container">
<el-breadcrumb separator=">">
<el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
<el-breadcrumb-item>{{ categoryData.name }}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<!-- 轮播图 -->
<div class="home-banner">
<el-carousel height="500px">
<el-carousel-item v-for="item in bannerList" :key="item.id">
<img :src="item.imgUrl" alt="" />
</el-carousel-item>
</el-carousel>
</div>
<div class="sub-list">
<h3>全部分类</h3>
<ul>
<li v-for="i in categoryData.children" :key="i.id">
<RouterLink to="/">
<img :src="i.picture" />
<p>{{ i.name }}</p>
</RouterLink>
</li>
</ul>
</div>
<div
class="ref-goods"
v-for="item in categoryData.children"
:key="item.id"
>
<div class="head">
<h3>- {{ item.name }}-</h3>
</div>
<div class="body">
<GoodsItem v-for="good in item.goods" :goods="good" :key="good.id" />
</div>
</div>
</div>
</div>
</template>
热门推荐
五笔输入法的辉煌与消亡:技术革命中的一段传奇
“真金白银”的实惠,汽车以旧换新撬动消费新活力
什么是 NPD 人格?如何区分健康自恋与病态自恋?
学校周年办学成果展展厅设计指南:以建校90周年为例
AI赋能寒假:广东高校师生的新春“智”趣
民营企业家座谈会召开:从杭州 六小龙看山东民营经济发展之路
“入学3个月后,我发现导师学术不端”
FPGA和嵌入式系统:定义、原理、架构、编程和应用领域的全面对比
干花花材要怎么挑?花材如何干燥?
“绿美+”让云南保山多赢发展
为什么说太平天国运动打掉清朝的半条命,却打出了中华民族的未来
94岁吴明珠院士重返新疆:62年育种生涯培育30多个瓜种
商务英语专业就业方向与就业前景怎么样
福建泉州洛阳桥:一桥带“火”一座城
科学护肤7大步骤,顺序很重要!
水垢清洁全攻略:从形成原因到彻底清除

肺癌:从病因、诊断到治疗的全面指南
17种机器学习回归算法在金融的应用
揭开香港公司上市的神秘面纱:全面解读上市要求
创新科技助力生态环境绿色发展 能源转型拥抱地球共享美好家园
股票分级的具体方式和投资策略是什么?这种分级对股票市场有何影响?
穿越时空的神话之旅:《黑神话·悟空》与《山海经》在“阅见东方”中碰撞出的奇妙火花
什么是斯诺克?规则、得分、颜色及摆放详解
守门员被红牌罚下,足球比赛中的处理方法
科学家开发扩展的非线性充电振子模型,量化气候模态相互作用对厄尔尼诺可预报性的影响
什么是合同分配?定义、原则、流程及优化方法全解析
陶喆:从鬼畜到翻红,华语R&B教父的文艺复兴
沈阳脚手架作业高度的科学判断与安全规范
【日本浮世绘】盘点丨浮世绘六大家
体育中考必考项目全攻略:跑步、立定跳远和跳绳技巧详解