跳到主要内容

防抖

通过设置 options.debounceWait,进入防抖模式,此时如果频繁触发 run 或者 runAsync,则会以防抖策略进行请求。

const { data, run } = useRequest(getUsername, {
debounceWait: 300,
manual: true,
});

如上示例代码,频繁触发 run,只会在最后一次触发结束后等待 300ms 执行。

你可以在下面 input 框中快速输入文本,体验效果

network/useRequest/debounce/index
import React from 'react';
import DemoContent from '@src/components/DemoContent';
import { Cell, Field, Input } from '@taroify/core';

import { useRequest } from 'taro-hooks';
import Mock from 'mockjs';

async function getEmail(search?: string): Promise<string[]> {
console.log('debounce getEmail', search);
return new Promise((resolve) => {
setTimeout(() => {
resolve(Mock.mock({ 'data|5': ['@email()'] }).data);
}, 300);
});
}

export default () => {
const { data, loading, run } = useRequest(getEmail, {
debounceWait: 1000,
manual: true,
});

return (
<DemoContent title="防抖">
<Field align="center">
<Input
placeholder="Search Emails"
onChange={(event) => run(event.detail.value)}
/>
</Field>
{loading ? (
<Field>loading...</Field>
) : (
<>
{data?.map?.((v) => (
<Cell key={v}>{v}</Cell>
))}
</>
)}
</DemoContent>
);
};

API

Options

debounce 所有参数用法和效果同 lodash.debounce

参数说明类型默认值
debounceWait防抖等待时间, 单位为毫秒,设置后,进入防抖模式number-
debounceLeading在延迟开始前执行调用booleanfalse
debounceTrailing在延迟结束后执行调用booleantrue
debounceMaxWait允许被延迟的最大值number-

备注

  • options.debounceWaitoptions.debounceLeadingoptions.debounceTrailingoptions.debounceMaxWait 支持动态变化。
  • runAsync 在真正执行时,会返回 Promise。在未被执行时,不会有任何返回。
  • cancel 可以中止正在等待执行的函数。