当前位置: 首页 > wzjs >正文

为什么做网站会被批捕小程序制作的方法有哪些

为什么做网站会被批捕,小程序制作的方法有哪些,自己做的网站怎么才能在百度上查找,企业展厅设计哪里好在 Vue3 项目中通过 AbortController 取消 Axios 请求&#xff0c;可以通过以下 结构化步骤 实现。我们结合组合式 API&#xff08;Composition API&#xff09;和现代前端实践演示&#xff1a; 一、基础实现&#xff08;单个请求&#xff09; 1. 创建组件逻辑 <script s…

在 Vue3 项目中通过 AbortController 取消 Axios 请求,可以通过以下 结构化步骤 实现。我们结合组合式 API(Composition API)和现代前端实践演示:

一、基础实现(单个请求)

1. 创建组件逻辑
<script setup>
import { ref, onBeforeUnmount } from 'vue';
import axios from 'axios';// 存储 AbortController 实例
const abortController = ref(null);
const data = ref(null);
const error = ref(null);
const isLoading = ref(false);// 发送请求方法
const fetchData = async () => {isLoading.value = true;error.value = null;// 如果存在旧请求,先取消if (abortController.value) {abortController.value.abort();}// 创建新控制器abortController.value = new AbortController();try {const response = await axios.get('/api/data', {signal: abortController.value.signal});data.value = response.data;} catch (err) {// 重点:识别取消错误if (err.name === 'CanceledError' || axios.isCancel(err)) {console.log('请求被主动取消');} else {error.value = err.message;}} finally {isLoading.value = false;abortController.value = null; // 清理控制器}
};// 组件卸载时自动取消
onBeforeUnmount(() => {if (abortController.value) {abortController.value.abort();}
});
</script><template><button @click="fetchData" :disabled="isLoading">{{ isLoading ? '加载中...' : '获取数据' }}</button><button @click="abortController?.abort()" :disabled="!isLoading">取消请求</button><div v-if="data">{{ data }}</div><div v-if="error" class="error">{{ error }}</div>
</template>

二、进阶实现(多个并行请求)

1. 封装可复用 Hook
// src/composables/useAbortController.js
import { onBeforeUnmount } from 'vue';export default function useAbortController() {const controllers = new Map(); // 用 Map 存储多个控制器// 添加控制器const createSignal = (requestId) => {const controller = new AbortController();controllers.set(requestId, controller);return controller.signal;};// 取消特定请求const abortRequest = (requestId) => {if (controllers.has(requestId)) {controllers.get(requestId).abort();controllers.delete(requestId);}};// 自动清理onBeforeUnmount(() => {controllers.forEach(controller => controller.abort());controllers.clear();});return { createSignal, abortRequest };
}
2. 在组件中使用
<script setup>
import { ref } from 'vue';
import axios from 'axios';
import useAbortController from '@/composables/useAbortController';const { createSignal, abortRequest } = useAbortController();
const userData = ref(null);
const postData = ref(null);// 并行发送多个请求
const fetchAllData = async () => {try {const [usersRes, postsRes] = await Promise.all([axios.get('/api/users', {signal: createSignal('users') // 唯一标识}),axios.get('/api/posts', {signal: createSignal('posts')})]);userData.value = usersRes.data;postData.value = postsRes.data;} catch (err) {if (!err.name.includes('Cancel')) {console.error('请求失败:', err);}}
};// 手动取消用户数据请求
const cancelUsers = () => abortRequest('users');
</script><template><button @click="fetchAllData">加载全部数据</button><button @click="cancelUsers">取消用户数据请求</button>
</template>

三、最佳实践要点

1. 错误处理规范
try {// ...请求逻辑
} catch (err) {if (err.name === 'CanceledError' || axios.isCancel(err)) {console.log('请求取消:', err.message);return; // 明确终止后续处理}// 其他错误处理if (err.response?.status === 404) {// 处理 404} else {// 通用错误}
}
2. 自动取消优化

在路由切换时自动取消所有请求:

// src/router.js
import { createRouter } from 'vue-router';
import { useAbortController } from '@/composables/useAbortController';const router = createRouter({...});// 路由守卫中全局取消
router.beforeEach(() => {const { abortAll } = useAbortController();abortAll(); // 需要扩展 Hook 功能
});
3. TypeScript 类型支持
// types/abort.d.ts
import type { AxiosRequestConfig } from 'axios';declare module 'axios' {export interface AxiosRequestConfig {signal?: AbortSignal;requestId?: string; // 自定义标识}
}

四、常见问题解决

1. 取消无效问题
  • 检查 Axios 版本:确保使用 axios@0.22.0+

  • 验证信号传递:确认请求配置中正确传递了 signal

  • 避免重复使用控制器:每个请求必须使用新实例

2. 内存泄漏预防
// 在组件卸载时清理
onBeforeUnmount(() => {abortController.value?.abort();controllers.clear(); // 对于 Map 存储的情况
});
3. 浏览器兼容性
# 安装 polyfill(如需支持 IE11)
npm install abortcontroller-polyfill
// main.js
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only';

通过这种设计,你可以实现:

  • ✅ 组件级自动请求取消

  • ✅ 精细化的多请求管理

  • ✅ 符合 Vue3 响应式特性的状态管理

  • ✅ 完善的 TypeScript 类型支持


文章转载自:

http://ejofoBIK.tqsgt.cn
http://PeiesZq2.tqsgt.cn
http://QUY07QG4.tqsgt.cn
http://LsMOdjFE.tqsgt.cn
http://EVZBRyH9.tqsgt.cn
http://yl6ZaFRq.tqsgt.cn
http://W30i5kyW.tqsgt.cn
http://yYYtDnt9.tqsgt.cn
http://Dd6d5Y7N.tqsgt.cn
http://k0Xke0ct.tqsgt.cn
http://NWwGzPLZ.tqsgt.cn
http://nVWAjaAN.tqsgt.cn
http://FK91p9lV.tqsgt.cn
http://F1icdeEx.tqsgt.cn
http://v9Xog37n.tqsgt.cn
http://Sq8CN7cl.tqsgt.cn
http://adh4mQGM.tqsgt.cn
http://QDUPJecx.tqsgt.cn
http://lyLwKXZC.tqsgt.cn
http://q1z1oKX6.tqsgt.cn
http://M70TRtd2.tqsgt.cn
http://T6mfB1Gb.tqsgt.cn
http://6FFRJJV7.tqsgt.cn
http://K0guKTBU.tqsgt.cn
http://73bRERXK.tqsgt.cn
http://o3QJDkln.tqsgt.cn
http://EJZkiTw3.tqsgt.cn
http://cZYEwsAX.tqsgt.cn
http://qw9dUW3U.tqsgt.cn
http://DSS144iW.tqsgt.cn
http://www.dtcms.com/wzjs/662909.html

相关文章:

  • 有做ppt的兼职网站吗市场营销推广策略
  • 青岛网站建设技术外包上海软件开发培训
  • 建立html网站seo网站快速
  • 海口网站建设方面宁德做网站的公司
  • 如何做企业网站方法WordPress添加PHP代码
  • 网站百度不收录的原因Wordpress搜索结果页插件
  • 南阳网站推广优化公司哪家好开网络网站建设公司的优势
  • 网站页面怎么设计那些网站可以给产品做推广
  • 网站开发预算农业科技公司网站建设
  • 网站域名费怎么查询宁波seo搜索优化费用
  • 外贸网站建设哪里好校园网站开发
  • 做网站的工具怎么使用网站页面打开速度慢
  • wordpress 站群系统蓝色网站风格
  • 广州快速建站哪家服务专业做网站的费用如何入帐
  • 崂山网站建设做外贸网站 用国外空间 还是 国内空间 区别
  • 网站建设与维护是什么内容?简单wordpress主题
  • 微官网和公众号的区别网站建设优化哪家公司好
  • 网站模块源码百度小说app
  • 天津电子商务网站秦皇岛海三建设没钱了
  • 沈阳住房城乡建设部网站软件外包app
  • 有人拉我做彩票网站seo职位
  • 公众号怎么做微网站吗公司起名字大全免费三字
  • 搞网站开发的程序员属于哪一类平台门户网站建设方案
  • 做网站要不要交税好看的静态页面
  • 光谷做网站推广哪家好网站建设线框图
  • 国内漂亮大气的网站做好网站建设
  • 网站引导页利弊长沙专业做网站公司哪家好
  • 网站改版设计方案高端网站建设方案
  • 中山教育平台网站建设上海南桥网站建设
  • 国外网站建设模板wordpress不显示中文图片