useRequest options.ready behavior #1291
Replies: 11 comments 11 replies
|
我的理解:manual的意思就是手动,表示请求应该由调用方主动通过run方法触发,在触发时刻才去检查ready是否为true,如果为false,表示这一次手动触发的请求应该是无效的。所以,即便是ready为true,但只要没有调用run或者refresh,都不应该执行 |
|
我个人认为,当 manual=false 时,每次ready从false变为true,都将使用最新的defaultParams,而无需理会run的参数,只有refresh的时候,才使用run的参数或defaultParams |
|
串行或者并行是不是可以交给用户自己处理,封装了ready的话,可能用户也不一定想起来去用,而且封装了很全的功能话,不一定有一个小而精的功能来的实用,个人理解哈 |
|
个人理解:manual为true时是否发送请求应该完全交由用户控制,ready值此时应该失效掉 |
|
在我的业务场景中,使用ready主要是:
作者,我还有个问题,因为我目前正在重构项目,老项目用的 ahooks v2,如果现在重构到 v3 ,v3不支持ready,我该怎么做,以方便之后过渡到 v3 支持ready? |
|
根据上面讨论,目前确定
|
|
已发布 v3.0.0-alpha.14 |
|
在最新的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的变化过程如下:
理论上 |
|
有些场景下,使用 ready 校验请求参数,参数不完整的时候接口没有触发,可能会导致很难排查问题,这种场景如果不用 ready,发出请求,接口会报错参数缺失,会更容易排查问题,想看看大家是怎么看待这个问题 |
|
这里设计ready做了两件事情: |
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触发过执行,那应该使用上一次的参数么。All reactions