前端Umi3搭建项目+统一错误拦截个人文章

node版本>=10.13,推荐nvm管理node版本,yarn管理npm依赖(使用国内源)

#国内源$npmiyarntyarn-g#后面文档里的yarn换成tyarn$tyarn-v$1.16.0先找个地方建个项目目录并进入

$mkdirmyapp&&cdmyapp创建项目并安装依赖

这里直接添加.eslintrc.js、.prettierrc.js、.stylelintrc.js,配置如下:

1、.eslintrc.js配置module.exports={extends:[require.resolve('@umijs/fabric/dist/eslint')],rules:{'react/jsx-first-prop-new-line':'error',semi:['error','never'],indent:['error',2,{SwitchCase:1}],'no-plusplus':'off','react/sort-comp':'off','no-unused-expressions':'off',},}2、.prettierrc.js配置constfabric=require('@umijs/fabric')module.exports={...fabric.prettier,semi:false,}3、.stylelintrc.js配置constfabric=require('@umijs/fabric')module.exports={...fabric.stylelint,}你的vscode要安装这三个同名扩展插件,这时候分别去更改js、less文件,会发现已经有风格校验了,保存会自动修复。

umi3默认支持less,如果需要sass,需要安装node-sass依赖,推荐使用less。

global.less会默认引入,所以这里可以用来写一些全局样式,src下建立styles目录,添加base.less和mixins.less,base.less可以作为导出各种变量和mixin给其他less文件使用的一个出口。

global.less添加cssreset和一些样式自定义,如下:

@import"~@/styles/base.less";body,dl,dt,dd,ul,ol,li,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;font-weight:400;font-family:Helvetica,Arial,sans-serif;text-align:left;background-color:#FFF;}html,body,#root{height:100%;margin:0;padding:0;color:@text-color;font-size:28px;}p,h1,h2,h3,h4,h5,h6{margin:0;padding:0;}fieldset,img{border:0none;}address,caption,em,strong,th,i{font-weight:400;font-style:normal;}ol,ul{list-style-position:outside;list-style-type:none;}根据项目添加...4、px转vw之所以用vw不用当前非常通用的rem,是因为rem方案有几个缺点:

yarnaddpostcss-px-to-viewport然后在umirc.js中添加配置如下:

exportdefaultdefineConfig({extraPostCSSPlugins:[postcssPx2vw({viewportWidth:750,unitPrecision:5,viewportUnit:'vw',minPixelValue:1,}),],});这样你发现css文件中的px已经自动转为vw了。

yarnaddgulpgulp-qiniu--dev添加配置根目录新建qiniuAssets目录和gulpfile.js,配置如下:

/*eslint-disableimport/no-extraneous-dependencies*/constgulp=require('gulp')constpath=require('path')constqiniu=require('gulp-qiniu')//fileuploadtasksconstimageSrc=path.resolve(__dirname,'qiniuAssets/*.*')gulp.task('qiniu',(done)=>{gulp.src(imageSrc).pipe(qiniu({accessKey:'你的七牛accessKey',secretKey:'你的七牛secretKey',bucket:'maihaoche',private:false,},{dir:'kunkka/assets/',version:false,},),).on('finish',done)})//combinetasksgulp.task('upload',gulp.series(['qiniu'],(done)=>{done()}))module.exports=gulp添加命令行在package.json中scripts中添加一行如下:

"upload":"gulpqiniu",将要上传的资源放到qiniuAssets目录中,然后执行命令:

大多数接口请求,与后台约定统一响应数据结构,统一错误处理,可以简化业务层处理逻辑,只处理正常流即可。

此处使用umi-request、antd-mobile处理请求,首先添加依赖:

yarnaddumi-requestantd-mobile然后添加utils/request.js,内容如下:

这里dva提供了一个onError的hook来全局错误处理,在src/app.js中添加dva配置:

effects:{*getUserInfo({payload},{call,put}){try{const{data}=yieldcall(getUserInfo,payload)yieldput({type:'setData',payload:{customerInfo:data}})}catch(error){console.log('获取失败',error)}},}或者不通过models调用的话,可以在promisecatch中处理,如下:

//获取客户信息getUserInfo().then((userInfo)=>{console.log('获取用户信息成功1',userInfo)}).catch((err)=>{console.log('获取用户信息失败1',err)})还有最坏的情况,后台返回的响应根本没有约定好响应的结构,且拒绝修改,那只能一边骂骂咧咧一边修改代码了,这个接口单独在业务中处理!如下传个标志给request:

importrequestfrom'@/utils/request'//不走统一拦截的接口,传个'noThrow'标志到request拦截层exportconstlogin=(data)=>request.post('/api/login.json',{data,noThrow:true})//统一异常处理的接口exportconstgetCustomerInfo=(data)=>request.post('/api/companyInfo.json',{data})request.js根据这个标志将这种接口的响应直接返回到前台,自己在业务中单独处理这种接口的异常情况。

THE END
1.casesensitivebynotcold·PullRequest#1714·umijs/("CARGO_MANIFEST_DIR")).join("test/build/case-sensitive");+let compiler = setup_compiler("test/build/case-sensitive", false);+let plugin = CaseSensitivePlugin::new();+let file = &File::new(+root.join("assets/umi-logo.png")+.to_string_lossy()+.to_string(),+compiler.context.clonehttps://github.com/umijs/mako/pull/1714
2.AntdUI标签仓库 沙加/AntdUI 的 Tagshttps://gitee.com/miraclephi06/AntdUI/tags
3.GiAdminPro5xCloudGi Admin Pro Gi Admin Pro 是一个基于 Vue3、Vite、TypeScript、Arco Design Vue、Pinia、VueUse 等的免费中后台模版,它使用了最新的前端技术栈,内置丰富的主题配置,有着极高的代码规范,基于 mock 实现的动态数据展示,开箱即用的模板,适用于需要快速构建中后台管理系统的开发者,同时也非常适合作为学习参考。https://www.5xcloud.com/column/opensource/269.html
4.MDNWebDocsThe MDN Web Docs site provides information about Open Web technologies including HTML, CSS, and APIs for both Web sites and progressive web apps.http://developer.mozilla.org/
5.ie9axios压根不发请求mob64ca12e36a1d的技术博客Axios在发送HTTP请求时,使用了现代浏览器的特性,如Promise和XMLHttpRequest的长选项。如果我们想要在旧版浏览器(如IE9)中执行这些操作,就会面临多个问题,包括CORS请求失败、Promise不支持、以及XHR的实现差异等。这些问题可能导致Axios根本不会发送请求。 1. Promise不兼容 https://blog.51cto.com/u_16213377/12840636
6.H.ZWei第二、创建httpRequest对象,上面就是网络请求的简单使用,接下来通过。把各种请求方式用枚举声明。**开放接口为测试用例。第三、发起请求,比如。 2023-12-10 17:41:02 5528 3 原创 TypeScript笔记 TypeScript是JavaScript类型的超集,它可以编译成纯JavaScript。可以在任何浏览器、计算机、操作系统上运行,并且是开源https://blog.csdn.net/hzw2017/
7.RequireJS下载指南蔬菜花卉2. 找到最新版本的RequireJS文件(通常为require.js)。 3. 直接下载require.js文件,或将文件链接添加到您的项目中。 四、RequireJS的应用 1. 创建模块 在RequireJS中,我们可以通过定义模块来组织和封装代码,一个模块可以包含函数、对象、类或其他任何JavaScript实体,我们可以创建一个名为“math”的模块,其中包含一些https://5g.hnjwwzy.cn/post/2888.html
8.讲了个免费的前端项目,小白也能学!腾讯云开发者社区如果找不到命令,那么建议重新到官网安装 npm,会自动帮你配置环境变量。 创建项目: 代码语言:javascript 复制 vue create user-center-frontend-vue 手动选择特性: 选择如下特性: 会自动生成代码并安装依赖: 然后用WebStorm打开项目,在终端执行npm run serve,能访问网页就成功了。 https://cloud.tencent.com/developer/article/2479167
9.使用axios和umi七月羽歌87 声望 https://learnku.com/laravel/t/44258
10.Plugins@umijspluginrequest《UmiJS3.x文档手册》@umijs/plugin-request 基于umi-request 和@umijs/hooks 的useRequest 提供了一套统一的网络请求和错误处理方案。启用方式 默认启用。介绍 错误处理是所有项目都会遇到的问题,我们约定了一个接口格式规范如下:interface ErrorInfoStructure { success: boolean; // if request is success data?: any; // response https://www.bookstack.cn/read/umijs-3.x/plugins-plugin-request.zh-CN.md
11.umirequest使用umi这篇文章主要介绍了umi-request的使用,包括快速使用方法、全局请求设置(如设置requestType和携带cookie)、请求拦截器(包括请求和响应拦截器,指出响应拦截器存在不足),还给出了错误处理的示例,并展示了POST和GET请求的使用。 关联问题:umi-request有何优势拦截器怎么改进如何处理错误状态 https://juejin.cn/post/7155832163391242270
12.UNPKGumiumi-request/README.md Version: 6.91 kBMarkdownView Raw 1## umi-request 2网络请求库,基于 fetch 封装, 旨在为开发者提供一个统一的api调用方式, 简化使用, 并提供诸如缓存, 超时, 字符编码处理, 错误处理等常用功能. 3 4--- 5 6## 支持的功能 7-urlhttps://unpkg.com/browse/umi-request@1.0.2/README.md
13.openapi+umi三生万物 2024-03-14 15:44 字数 4310 阅读 389[私密] import{extend}from"umi-request";import{ElMessage,dayjs}from"element-plus";import{userRefresh}from"@/servers/api/UserApi";import{useGlobalStore}from"@/store/global";// 创建新实例constrequest=extend({timeout:60000,});// 请求拦截varrefreshhttps://www.fenxianglu.cn/note/detail/460
14.umijs@userequest源码解读`); } }); // 用法3:传入异步函数 import request from 'umi-request'; export async function getUserInfo(): Promise<User> { return request('/api/userInfo'); } const { data, error, loading } = useRequest(getUserInfo) 2)源码分析第一次调用时,缓存中不存在数据,则会自动执行获取数据https://www.jianshu.com/p/67b81b022661
15.Vehicle4SeatsElectricUtilityCarSupplierManagement System Certification: ISO 9001, ISO 9000, ISO 14064, ASME Business Type: Manufacturer/Factory Main Products: Electric Vehicles Electric Cleaning Equipment Company Introduction Trade Capacity Production Capacity Jinan Umi Electric Vehicle Co., Ltd. Manufacture different kinds of electric cars andhttps://141442a42c6e1842.en.made-in-china.com/
16.前端java分布式react.jsReactJS入门之Model层export default async function request(url, options) { const response = await fetch(url, options); checkStatus(response); return await response.json(); } 四:mock数据 umi 中支持对请求的模拟,由于我们现在没有真正的服务可以返回数据,所以才需要模拟。 https://www.kuazhi.com/post/406108.html
17.AntDesignPro5网络请求和错误处理@umijs/plugin-request则在umi-request上又进行了封装。umi-request提供了错误处理机制,@umijs/plugin-request则提供了常规的错误处理方法,并约定了服务器返回响应的数据格式。还提供了useRequest。 需要特别注意的是,引用request时,要引用@umijs/plugin-request,而不是umi-request,否则会发现request的行为与@umijs/pluhttps://www.ujcms.com/knowledge/469.html
18.ReactQuill富文本编辑器中图片上传服务端ReactJSumi request post formdata https://github.com/umijs/umi-request/issues/168 Content-Disposition: form-data; name="image"; filename="-e-预报预警@2x.png" Content-Type: image/png 加上imageHandler 之后,输入卡顿 一次只能输入一个字符。 类似问题: https://www.sunzhongwei.com/react-quill-image-upload-server-in-rich-text-editor
19.三种安装方式搭建reacttypeScript项目标签:ReactumitypeScript创建项目 免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。 上一篇:深度解读如何使用requestAnimationFrame 高效精准地重绘平滑的动画下一篇https://www.qy.cn/jszx/detail/43332.html
20.浏览器缓存库设计总结(localStorage/indexedDB/PWA)结合http请求库(axios/umi-request)进行更细粒度的缓存代理层设计 正文 1.浏览器缓存的基本过程 首先要想设计一个优秀的缓存策略,一定要了解浏览器缓存的流程,接下来是笔者总结的一个基本的流程图: 上图展示了一个基本的从浏览器请求到展示资源的过程,我们的缓存策略一部分可以从以上流程出发来做优化.我们都知道页https://www.imooc.com/article/302614
21.常见问题dumi 基于 Umi,即除了自己提供的配置项以外,还支持所有Umi 的配置项,并且也支持 Umi 生态的插件,所以如果需要更多的功能,可以先看一下 Umi 的配置项和插件生态能否满足,如果仍旧不能,欢迎到讨论群反馈或者 GitHub 上提出Feature Request 为什么 README.md 会出现在文档的首页? 无论是文档还是官网,一定会有首页。https://v1.d.umijs.org/zh-CN/guide/faq
22.组件总览如果你的后端数据使用了自己熟悉的 url,虽然我们可以用 Umi 的 request 来转化,但是每个 table 都需要配置就比较麻烦。如果你使用 Umi 的 request,我们可以定义一个全局的转化器。我们需要在 app.tsx 中配置 tsx import{ request, RequestConfig }from'umi';exportconstrequest:RequestConfig={errorConfig: {adaptor:https://procomponents.ant.design/components
23.reactdvaumi框架入门总结.docx会根据你的选择自动创建好目录和文件 3 安装依赖 npm install //慢 //慢的话可切换淘宝镜像 //获取镜像- npm config get //设置镜像- npm config set registry 4 启动项目 npm start 5 项目结构 6 项目结构解析在生成的脚手架基础上,src下添加了 utils/request.js(npm install umi-request --save),servichttps://max.book118.com/html/2022/0420/7016155144004113.shtm
24.@ahooksjs/useAuto-triggered request and Manually-triggered Request SWR(stale-while-revalidate) Cache / Preload Refresh On Window Focus Polling Debounce Throttle Concurrent Request Dependent Request Loading Delay Pagination Load more, data recovery and scroll position recovery https://classic.yarnpkg.com/en/package/@ahooksjs/use-request