用 openapi-codegen 生成 React Query 代码,真香~
本文最后更新于:2022年7月8日 下午
前言:之前在项目中我都会使用 https://github.com/contiamo/restful-react 从Swagger生成接口代码,省了很多对接口的时间。本以为就这样了,直到我遇到了 https://github.com/fabien0102/openapi-codegen,才知道什么才是真的香~ 这里来分享一下它是有多香。
新欢与旧爱
我们先来说说 https://github.com/contiamo/restful-react , 它虽然解决了接口问题,但也存在非常明显的缺点,数据请求处理这一层太弱,仅仅是在fetch
上做了简单的封装,没有办法支持复杂的处理,如二次请求、缓存等,需要自己去做处理,麻烦且成本不低。
它的作者也是发现了这个问题,就开了新坑 https://github.com/fabien0102/openapi-codegen , 使用 React 当红炸子鸡 – React Query 来做数据请求,这样在支持接口生成的同时,能够支持非常强大的数据处理能力。
上手
https://github.com/fabien0102/openapi-codegen的使用非常简单,两条命令一敲就完成了初始化
1 |
|
根据命令提示输入,会得到这几个文件
1 |
|
openapi-codegen.config.ts
是保存了我们生成接口的一些配置,如果有多个后端swagger,可以在这个里面配置。ewyaComponents
是我们可以直接使用的组件,ewyaContext
包含了一些配置,ewyaFetcher
是封装了fetch
请求给react-query
使用,ewyaSchemas
中保存了ts类型
剩下的就跟 react-query 的使用基本一致了,我这里因为要在多个子项目里面使用就把它封装到了一个组件里面。
1 |
|
我们可以在ewyaFetcher
中对接口状态码进行判断,处理一些业务逻辑,如错误提示、刷新cookie等
待改进
当然它也有未完善的地方,比如说没有支持react-query的infinite hook,这里提供一个我的解决方案:
1 |
|
小结一下
在新项目中使用下来,相对于其他swagger生成代码方案(Pont、openapi等)它使用起来简单很多,而且再结合上 react-query 的强大请求处理能力,相信你在用到项目中后也能感受到它真的香~