useRequest options.ready behavior #1291
Replies: 11 comments 11 replies
-
|
我的理解:manual的意思就是手动,表示请求应该由调用方主动通过run方法触发,在触发时刻才去检查ready是否为true,如果为false,表示这一次手动触发的请求应该是无效的。所以,即便是ready为true,但只要没有调用run或者refresh,都不应该执行 |
Beta Was this translation helpful? Give feedback.
-
|
我个人认为,当 manual=false 时,每次ready从false变为true,都将使用最新的defaultParams,而无需理会run的参数,只有refresh的时候,才使用run的参数或defaultParams |
Beta Was this translation helpful? Give feedback.
-
|
串行或者并行是不是可以交给用户自己处理,封装了ready的话,可能用户也不一定想起来去用,而且封装了很全的功能话,不一定有一个小而精的功能来的实用,个人理解哈 |
Beta Was this translation helpful? Give feedback.
-
|
个人理解:manual为true时是否发送请求应该完全交由用户控制,ready值此时应该失效掉 |
Beta Was this translation helpful? Give feedback.
-
|
在我的业务场景中,使用ready主要是:
作者,我还有个问题,因为我目前正在重构项目,老项目用的 ahooks v2,如果现在重构到 v3 ,v3不支持ready,我该怎么做,以方便之后过渡到 v3 支持ready? |
Beta Was this translation helpful? Give feedback.
-
|
根据上面讨论,目前确定
|
Beta Was this translation helpful? Give feedback.
-
|
已发布 v3.0.0-alpha.14 |
Beta Was this translation helpful? Give feedback.
-
|
在最新的3.0.0版本里面,我同时设置了refreshDeps和ready,如下: const { data: task, loading: loadingTask } = useRequest(
() => getTask({ projectUrl: key, taskId }),
{
refreshDeps: [taskId, key],
ready: key !== undefined && taskId !== undefined,
}
);key和taskId的变化过程如下:
理论上 |
Beta Was this translation helpful? Give feedback.
-
|
有些场景下,使用 ready 校验请求参数,参数不完整的时候接口没有触发,可能会导致很难排查问题,这种场景如果不用 ready,发出请求,接口会报错参数缺失,会更容易排查问题,想看看大家是怎么看待这个问题 |
Beta Was this translation helpful? Give feedback.
-
|
这里设计ready做了两件事情: |
Beta Was this translation helpful? Give feedback.
-
|
ready从文档的介绍来看,确实和manual区别不大。或者说有其他具体场景文档没有提到? 对于串行请求,个人认为useSWR的方案会更好一些,那就是传入给第二个useRequest的参数是undefined即可,获取到第一个网络请求的数据后再设置为正常的值,就触发第二个请求。 |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
这里我们来讨论下 3.0 useRequest
options.ready的行为。为什么要加
ready属性?我理解
ready最核心的诉求是以下两点:1. 串行请求,当
ready变为true时,才发起请求。比如上面的示例,通过
ready实现了三个请求的串行。2. 当
ready = false时,阻止任何请求。在上面的示例中,当
ready为false时,任何时候请求都是不会发出的。目前存在哪些问题
但目前在
ready的行为设计上,还是有很多地方有歧义:当
manual=false时的行为1.
ready在每次从false变为true时都会自动发起请求吗?这个我个人理解,确实应该每次变为
true时发起请求。2.
defaultParams在何时使用?defaultParams是在默认发起请求时带上的参数,那每次ready从false变为true,参数行为应该是怎么样的?是都带?还是都不带?还是只有首次带。3.
ready在自动请求时,是调用refresh,还是run?假如我手动触发过
run(1, 2, 3),那未来下一次ready从false变为true时,自动调用应该带上哪个参数?4.
ready=false时,runAsync的 Promise 是不会响应?还是 reject这个我理解应该挂起不响应。
当
manual=true时的行为1.
ready开始是 false,然后手动调用了run,此时应该不会发起请求。但当ready从false变为true时,会自动发起上次请求吗?这个我理解应该是不会。
最后
回到加
ready的初衷来讲:manual=true时,如果ready=false,则所有的run都是无效的。manual=false时,每次ready从false变为true,都会自动发起请求。但是defaultParams是不是每次都带上就是比较头疼的问题了。同时假如已经通过run触发过执行,那应该使用上一次的参数么。Beta Was this translation helpful? Give feedback.
All reactions