useRequest的debounceLeading和ready结合使用时不生效
const [ready, setReady] = useState(false);
const { data, loading, run } = useRequest(getEmail, {
debounceWait: 3000,
debounceLeading: true,
ready: ready
});
上述代码在sandbox时调试时,发现debounceLeading偶现不生效,即有时候当ready切换到true时,getEmail不立即执行
偶现是当manual明确设置为false的时候,leading有时候能起作用😂
版本:3.8.0
你把你的 demo,链接贴一下呢
Hello @mzleman. Please provide a online reproduction by forking this link https://codesandbox.io/s/ok2fe or a minimal GitHub repository. Issues labeled by Need Reproduce will be closed if no activities in 3 days.
你好 @mzleman, 我们需要你提供一个在线的重现实例以便于我们帮你排查问题。你可以通过点击 此处 创建一个 codesandbox 或者提供一个最小化的 GitHub 仓库。3 天内未跟进此 issue 将会被自动关闭。

你把你的 demo,链接贴一下呢
https://codesandbox.io/p/sandbox/funny-varahamihira-7c5y38?file=%2FApp.tsx 看样子非必现?有点奇怪的。刷新页面时候容易复现
Hello @mzleman. We totally like your proposal/feedback, welcome to send us a Pull Request for it. Please send your Pull Request to proper branch (feature branch for the new feature, master for bugfix and other changes), fill the Pull Request Template here, provide changelog/TypeScript/documentation/test cases if needed and make sure CI passed, we will review it soon. We appreciate your effort in advance and looking forward to your contribution!
你好 @mzleman,我们完全同意你的提议/反馈,欢迎直接在此仓库 创建一个 Pull Request 来解决这个问题。请将 Pull Request 发到正确的分支(新特性发到 feature 分支,其他发到 master 分支),务必填写 Pull Request 内的预设模板,提供改动所需相应的 changelog、TypeScript 定义、测试用例、文档等,并确保 CI 通过,我们会尽快进行 Review,提前感谢和期待您的贡献。

已定位到问题,核心原因是在useRequest在mount的时候,只会通过判断manual决定是否执行第一次:
因此,会在mount时,执行一次debounce的request动作,导致在debounceWait的时间里都无法执行。如果上面这个codebox的demo把debounceWait时间改成10s,将更容易复现。
但是为什么执行了会不生效呢?也就是没有loading,也不会出现结果:
因为在这里第一次runASync时,拿到的回调至stopNow会根据ready设置为true,因此实际上是首次执行了一次方法,但这个方法被终止,但是debounceWait的效果还在。
如何修复:
在useRequest Mount的地方加上ready的判断,和stopNow判断保持一致。
一个简单的修复后的demo仓库:https://github.com/ruixingshi/test-use-debounce
@crazylxr @mzleman cc @caorushizi