-
-
Notifications
You must be signed in to change notification settings - Fork 91
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在使用 vue-request 之后的一些改进建议 #39
Comments
这个会在内部的类型重构完之后导出给用户使用的,目前内部的类型声明还有点乱,挺多地方值得优化一下的
至于这个问题,暂时还没有这个计划。因为这样做一方面会不太稳定,而且状态维护起来比较困难,另一方面就是我们的想法是库的底层简单点好,这样上层使用的话就会更加灵活。你提出的这个问题,上层用计数器应该就可以实现了。
这个具体是什么问题,可以开个issue详细聊一下。
这个我当初在实现时也有考虑过,但是如果再 非常感谢你选择使用 |
感觉这个和
这个我觉得上层实现起来难度不大,库底层实现这个东西确实不是太合适,不过我觉得可以提供一些更方便的接口来方便二次封装,例如对于全局显示 loading 的封装,由于 loadingDelay 这个配置的原因,我不知道具体什么时候 loading 会变成 true,所以只能通过 watchEffect 来监听 loading 的变化,从而实现对 全局 loading 效果的显示和隐藏。不知道有没有更好的实现方式
差不多还是类型推导的问题,在使用 formatResult 的情况下,formatResult 的 参数的类型会变成 any,返回值可以正常推断成功,这个我在另一个 issue 里面有看到类似的问题,后续弄一段代码复现一下,新开一个的 issue 讨论下吧 |
refresh 代替 reload 其实不是很好,在一个下拉刷新,上拉加载更多的这个场景下,refreshing 绑定到了下拉刷新的 loading 状态,loadingMore 绑定到了 上拉加载更多的 loading 状态,那么使用 refresh 来做刷新的话,vant 下拉刷新组件是的 loading 是不会显示的(PullRefresh 的 loading 在没有下拉触发的时候,被定位到了容器外面,容器有个 overflow hidden 属性给隐藏了,显示不出来,需要下拉的时候才会出现)。所以当 reload 的时候,数据被清空,会出现界面是有一段时间空白,而没有任何加载信息反馈给用户的情况 |
如果做全局 loading 的话,其实不用管 VueRequest 返回的 或者我们这边也可以考虑一下,有没有好的办法能够底层也把这部分事情给处理了。主要还是看需要的人多不多😂 |
例如列表上方有一个搜索框,这个时候输入关键字搜索列表内容。如果使用 refresh 的话,因为不存在下拉无法显示下拉动画,加载更多也因为在列表顶部所以也无法显示(上拉加载的动画在列表最底部),所以只能清空列表,然后重新加载数据,通过 loadingMore 的加载更多动画给予用户一个反馈。否则就只能再加额外的逻辑去另外实现一个加载动画来通知用户正在搜索。
这个方式我也有考虑过,但是后面放弃了。主要的原因是某些情况下因为有其他的loading显示规则而需要在全局的地方显示loading动画,就会比较难搞,还需要再想办法对于是否在 axios 发请求的时候显示loading做额外的处理。比如 列表下拉刷新这个场景就不需要再全局显示loading,因为list组件已经有loading的交互效果了。 |
最近在使用过程中同样遇到一样的问题,希望能暴露出一些方法和类型方便二次封装. |
最近我们做了个新项目选用了 vue3,也使用了 vue-request 这个库,目前使用一个多月了,有一些建议我觉得可以讨论一下
暴露更多的内部 API和类型
目前我们项目使用这个库,都是无法直接使用的,需要进行二次封装,这个因为发送请求的多变性而没办法避免的,进行二次封装的时候我遇到了一些问题,有下面一些建议。
BaseOption
这种在 index.ts 里面暴露出来,方便引入QUERY_DEFAULT_KEY
),内部方法(例如useAsyncQuery
)在 index.ts 中暴露出来,方便自己实现一些自定义的逻辑说实话我感觉用这个库的时候,二次封装的可能性非常大,我觉得作者大大可以多考虑一下二次封装的便捷性。
---------------------------分割线,下面可能是一些废话,作者大大可以考虑跳过,主要结论都在上面--------------------------
useRequest 的封装
我希望在发送请求的时候,如果请求时间过长超过 loadingDelay 的值的时候,在全局显示一个加载,遇到我问题如下
BaseOptions
进行扩展,但是导入的时候,我得从vue-request/dist/types/core/config
里面进行导入,这很不友好。希望可以在 index.ts 直接导出useLoadMore 的封装
因为加载更多这个逻辑,一个系统的类型肯定是一样的,如果不进行二次封装,那么每次使用的时候都会写一大堆类型声明,这样肯定不合适。二次封装的时候一些问题如下
-----------下面是自己封装 useLoadMore 出现的问题----------
useAsyncQuery
,所以就只能基于useRequest
了(强烈建议多暴露一写内部方法)useRequest
返回值解构出来的data
进行复制为null
是不起作用的(看了源码发现 data 的值总是 latestQuery.value.data,赋值还是会被改回来),然后看到好像有个 reset 但是发现 useRequest 这个方法没导出 reset,然后想通过 queries 重置发现QUERY_DEFAULT_KEY
这个常量没导出,最后我直接用__QUERY_DEFAULT_KEY__
这个玩意儿来获取默认 query,调用 mutate 来重置了。(饶了好大一个弯儿)。useAsyncQuery
,上面那一步的东西都不存在hooks 的设想
对于发送请求这个需求,应该会有很多的奇奇怪怪的需求,如果可以抽象出来一些公用的 hooks,应该可以解决很多自定义的需求,例如上面我对 useRequest 进行封装,在请求超过 loadingDelay 的时候,全局显示 loading,如果有一个 hook,只要有一个请求变为 loading 的时候,触发一个比如叫 beforeAnyLoading 的钩子,然后我就给他显示一个 loading 动画,然后有个 afterAllLoaded,然后我把 loading 动画关掉,这就很完美。
The text was updated successfully, but these errors were encountered: