-
-
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
[v2] 关于 v2 版本 🔥 | About the v2 version #121
Comments
pnpm 安装失败 |
@dmyz 已修复 |
|
@winter-ice 这是你类型写错了吧,贴个示例代码看看 |
@John60676 我直接用示例代码,IDE(Webstorm)也会警告, 不知道为什么
|
@John60676 那应该可能是版本问题了 vue-request 2.0.0-alpha.2 |
@winter-ice 我换了个eap版本也没法重现,你看看能不能开个issue提供一下更详细的信息 |
@John60676 没有更详细的信息了,也没有搞什么特殊的配置,用的其他库也没有出现这种情况,如果你那没复现,那就还是等正式版的时候如果还有问题我再研究研究吧。添麻烦了,感谢🙏 |
分页请求用runAsync时,不会带defaultParams参数 |
@dmyz 这是预期行为,分页请求应当使用内部提供的分页方法 ( |
export { RequestConfig, setGlobalOptions, useLoadMore, usePagination, useRequest }; |
@caocaoem 有提供一个 |
确实看到了,希望下一版本能将其导出来,感谢~ |
cacheKey 设置后不起作用,缓存时间内还是访问后端接口 |
@dmyz |
***@***.***
loading 状态返回不正常
|
@dmyz 请单独提issue,并提供重现示例。不要直接说什么什么不行 |
提一个现在碰到的很实用的优化建议: |
@yuntian001 2.x 在设置了cacheKey 的情况下,请求也是会进行复用的 |
@John60676
|
确认你测的版本是 v2 哦
确认你测的版本是 v2 哦 |
肯定是v2啊,你可以随便起个vue项目自测一下啊,再说v1也没有runAsunc啊 |
产生这个问题的原因是,发起请求时上一个请求还没完成缓存还没写入。建议第一次请求就记录下,后续请求在拿不到cache时做个事件注册,等第一次请求完成后就触发这个事件event。 |
https://codesandbox.io/s/sharp-blackwell-88uops 处理逻辑没有问题哦。这里的逻辑是这样的:当缓存还没建立时,确保在同一个组件里同一个请求使用最新的那个相关代码;如果是不同组件,发起同一个请求,则会使用缓存中的请求。 |
但是同一个组件被父组件引用好几次是很正常的啊,比如父组件需要两个地址选择框,就会声明两个地址选择组件,这两个地址选择组件就会在初始化的时候都会去请求初始化数据。这时候就相当于多次请求了 |
@yuntian001 这个 demo 就是你说的场景呀 |
你的setup 里没有进行请求啊,只是点击才进行的请求,一般组件在setup里created或者onmounted就会去请求初始化数据 |
我本地试了组件多次挂载的情况下确实没问题,谢啦 |
还有俩问题 |
@yuntian001 去开个新的 issue |
使用的时候有这样的场景。分页请求。但是参数是依赖参数。依赖参数使用ready 同时参数也是refreshDeps参数。回导致同时发起两次相同请求 需要一个配置变量只控制初始化的时候不请求 usepagination的时候 manual 为true vue-request/src/core/createQuery.ts Line 38 in 24d0284
初始化参数没有存在 vue-request/src/core/createQuery.ts Line 134 in 24d0284
调用refresh会出现错误 |
@Colory 这个已经是在计划中的了。
问题已经重现了,下版本会修复 |
@Zrad useRequest(xxx.getVechecileTree.post) |
@John60676 好的。感谢。 |
usepagination 导出current vue-request/src/usePagination.ts Line 111 in f805725
版本 rc.1 |
rc.2 已修复 |
首次调用请求data会undefind,再此同样请求之后就正常,后端也显示第一次请求正常返回了数据给前端,但第一次调用必然undefind |
提 issue,给重现示例 |
连续调用runAsync存在问题 const sleep = (time: number) => new Promise<void>((res) => setTimeout(res, time));
const { runAsync } = useRequest(sleep);
const req = () => {
range(0, 10).forEach((i) => runAsync(i).then(() => console.log("result console")));
range(0, 10).forEach((i) => sleep(i).then(() => console.log("time console")));
};
req(); 期望10次result打印,只有1次 没有配置全局的config 是否是处于loading中的无法重复调用??这样设计的考量点是为什么呢? |
上一个请求没完成前触发下一个请求,前者将会被取消 |
但是测试过程也是每次都调用了请求方法的。只是之后then回调 和 onSuccess 一次执行 const sleep = (time: number) => new Promise<void>((res) => setTimeout(res, time));
const { runAsync } = useRequest(async (i) => (console.log("result " + i), await sleep(i), i));
const req = () => {
range(0, 1000, 100).forEach((i) => runAsync(i).then((n) => console.log("result console ", n)));
range(0, 10).forEach((i) => (console.log("time " + i), sleep(i)).then(() => console.log("time console")));
};
req(); |
|
啥时候出Releases版 |
可不可以把 loading的默认值放到配置options中啊 |
大佬还更新么 |
更的,rc版能正常用,只是有些新特性还没想好怎么写所以没法正式版 |
大佬后续正式版还发布不 |
已发布正式版 |
观摩一下大佬的项目 |
还是没有导出。球球大佬,有附带的示例吗 |
2.0.3 已经导出了 |
Line 13 in 11f2546
谢谢大佬 我看到了代码中使用,但是没有预留参数接口 因为业务中对分页请求的处理稍微要复杂点 想附加一些结构化导出到 usePagination中 ,现在实现的做法稍微复杂了点。如果有可以直接附加 自定义plugin 到其中就更好了 还有一个点很疑惑的是 插件中的onBefore 和 useRequest中的返回参数不一致 其实请求中需要前置判断的时候较多,当前useRequest的onBefore 缺少了前置判断中断请求的方式。 期望的其实是可以在onBefore中类似plugin的返回 isBreak或者其他Error Promise.reject之类的中断 |
开个issue来讨论吧,方便追踪问题 |
正式版已发布
文档
安装
yarn add vue-request # or npm add vue-request
变更列表
使用
vue-demi
兼容 vue2 Support Vue 2 #38新增自定义缓存
getCache
、setCache
和clearCache
。开启缓存的情况下,设置了相同
cacheKey
的请求将会被缓存和复用。新增
runAsync
和refreshAsync
,将返回Promise
。新增
definePlugin
,可以通过插件来扩展 useRequest 的功能。节流/防抖模式下可以使用
runAsync
返回正常的Promise
。新增
useRequestProvider
hooks,用于注入 options 配置。新增
refreshDepsAction
选项,用于自定义refreshDeps
触发后的行为。refreshDepsAction
在manual=true
时,也会被refreshDeps
的改变而触发。新增
loadingKeep
。移除 内部集成请求库,
service
不再支持字符或对象。 迁移帮助移除
formatResult
。 迁移帮助移除
queryKey
,即移除了并行模式 迁移帮助run
不再返回Promise
迁移帮助请求出错时,
data
不再会被清空[Need Help] 请求报错之后data被重置为undefined了 #82修改
ready
的逻辑 迁移帮助ready
支持传入一个返回布尔值的函数 [Feature Request] 一些语法糖 #166data
和error
改为shallowRef
usePagination
移除了reload
方法和reloading
。如需要对应的需求,可自行实现。移除了
RequestConfig
组件 迁移帮助重构了
useLoadMore
,具体 API 可查看详情 API 说明cacheKey
支持传入函数:cacheKey: (params?: P) => string
refreshDeps
支持传入 一个函数,返回一个值 、是一个 ref 、一个响应式对象 或是由以上类型的值组成的数组 [Feature Request] 一些语法糖 #166部分
options
支持响应式,如下所示迁移帮助
service
不再支持字符或对象。期望用户可以根据其他第三方请求库进行封装(如axios
),只要提供Promise
即可formatResult
。期望用户自行在service
中返回最终格式的数据。移除
queryKey
,即移除了并行模式。期望将每个请求动作和 UI 封装为一个组件,而不是把所有请求都放到父级。修改
ready
的逻辑manual=false
时,每次ready
从false
变为true
时,都会自动发起请求,会带上参数options.defaultParams
。manual=true
时,只要ready
为false
,则无法发起请求。run
不再返回Promise
。直接用runAsync
替代原本的run
。可自行通过
useRequestProvider
封装 。useLoadMore API
Options
true
时,你需要手动触发loadMore
或者loadMoreAsync
才会发起请求。默认为false
boolean
manual=false
时,每次ready
从false
变为true
时,都会自动触发refresh
。当manual=true
时,只要ready
为false
,则无法发起请求。Ref<boolean> | () => boolean
refresh
,如果设置了refreshDepsAction
则触发refreshDepsAction
WatchSource<any> | WatchSource<any>[]
refreshDeps
改变后触发() => void
number | Ref<number>
{leading: false, maxWait: undefined, trailing: true}
number | Ref<number>
{leading: false, trailing: true}
number | Ref<number>
number | Ref<number>
(data?: R) => boolean
() => void
() => void
(data: R) => void
(error: Error) => void
Result
list
数组,类型为{ list: any[], ...other }
Ref<R>
data
的list
数组Ref<R['list']>
Ref<boolean>
Ref<boolean>
options.isNoMore
使用Ref<boolean>
Error
options.onError
处理() => void
Promise
,需要自行处理错误() => Promise<R>
options.onError
处理() => void
Promise
,需要自行处理错误() => Promise<R>
data
的结果(arg: (oldData: R) => R) => void | (newData: R) => void
() => void
待办列表
options
支持响应式。 (>=2.0.0-alpha.3
)usePagination
。 (>=2.0.0-alpha.3
)useLoadMore
。 (>=2.0.0-beta.2
)taro
等小程序的环境。 (>=2.0.0-rc.1
)注意
有问题需要反馈的,请开个 issue 讨论
The text was updated successfully, but these errors were encountered: