如何在 React Query 中将 debounce 与 useQuery 一起使用?

2024-02-10

我正在使用 React Query 从 React 应用程序中的 API 获取数据。我想实现去抖以获得更好的性能,但我无法让它与 useQuery 一起使用。当我尝试将 API 调用包装在去抖函数中时,收到一条错误消息“查询函数必须返回定义的值”。

这是我当前使用的代码:

    async function fetchProducts() {
        const response = await axios.get(`/api/products?category_id=${category_id}&${searchParams.toString()}&page=${page}`);
        return response.data;
    }

    const debouncedFetchProducts = React.useMemo(
        () => _.debounce(fetchProducts, 500),
        [fetchProducts]
    );

    // The following queries will execute in parallel
    const categoryQuery = useQuery({ queryKey: ['category'], queryFn: fetchCategory, keepPreviousData: true });
    const productsQuery = useQuery({ queryKey: ['products', category_id, sortPrice, minPrice, maxPrice, page, categoryFilters], queryFn: debouncedFetchProducts, keepPreviousData: true, staleTime: 1000 });

当我运行它时,我收到一条错误消息“查询函数必须返回定义的值”。我相信这是因为 debounced 函数返回一个承诺,但 useQuery 需要一个实际值。

我也尝试过使用 useAsync,但我想使用 useQuery 因为它具有内置缓存。

有人可以帮我弄清楚如何在 React Query 中使用 useQuery 实现 debounce 吗?

预先感谢您的帮助!


您可以利用使用去抖 https://usehooks.com/useDebounce/挂钩来触发queryKey在反应查询中更新而不是使用debounce来自 Underscore 库的函数。

例如:

const [searchParams, setSearchParams] = useDebounce([category_id, sortPrice, minPrice, maxPrice, page, categoryFilters], 1000)
const productsQuery = useQuery({ queryKey: ['products', ...searchParams], queryFn: fetchProducts, keepPreviousData: true, staleTime: 1000 });

useDebounce应用于 searchParams 数组,其中包括类别id、sortPrice、minPrice、maxPrice、page 和categoryFilters 等变量。

去抖延迟设置为 1000 毫秒(1 秒)。然后,productsQuery 在其查询键中使用去抖搜索参数,确保fetchProducts仅当去抖搜索参数更改时才调用该函数。

你可以找到一个工作useDebounce在此示例代码沙盒示例 https://codesandbox.io/s/ted8o

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 React Query 中将 debounce 与 useQuery 一起使用? 的相关文章

随机推荐

  • 如何使用javascript在IE中的表单中设置文本区域值

    如果是 Firefox 我可以使用它在表单 提交问题 中设置文本区域 selectedtext 值 但在 IE 中失败 document submitquestion selectedtext value txt 这应该有效
  • 通过 Excel 的 eDrawings API

    我正在尝试通过 Excel 使用 edrawings VBA api 我已经下载了 edrawings SDK 似乎 api 仅通过用户表单运行 我通过 Excel 为 SolidWorks 制作了一些 VBA 宏 但与 SolidWork
  • AWS S3 存储桶“404 未找到”

    目前我正在托管一个捆绑包Angular 2应用程序在AWS S3 bucket 所以它只包含 html and js files 绝对路径http example com 确实有效 但如果我切换到任何链接 例如http example co
  • 无法关闭 TCP_NODELAY

    我正在使用 Boost asio 发送 TCP 消息 我设置了 NO DELAY 选项 因为这是一个 实时 控制系统 我看到使用 Wireshark 在消息中设置了 PSH 标志 我对它的表现很满意 它正在按预期工作 出于兴趣 我决定关闭
  • 模拟输入:按键按下、按住和释放

    我试图模拟用户按下某个键 按住某个键一段特定的时间间隔 然后释放它 我尝试使用来实现这个SendKeys Send 但我不知道如何控制按键的持续时间 我不想一遍又一遍地发送相同的密钥 我想要一个按键按下和一个按键弹起事件 例如 我有这样的代
  • 在同一个 ios 项目中使用 2 个版本的 AFNetworking

    我有一个项目 我使用了 AFNetworking 2 0 不是可可豆荚 刚刚添加到项目中 然后 我实现了日历 MSCollectionViewCalendarLayout 它在 pod 中打包了一些依赖项 其中之一是 RestKit gt
  • 如何通过 aot 编译在 Angular 中提供备用 i18n 语言链接?

    我目前正在开发 Angular 应用程序的 i18n 我使用 AOT 编译 xlf 文件来创建预编译的应用程序 如下所述here https angular io docs ts latest cookbook i18n html 在构建中
  • jQuery $(document).ready 在 Iron/Chrome 中损坏

    我使用 jQuery 和 jFancyTiles 编写了一个小图像幻灯片 可以在此处看到 http www netzwerkag at http www netzwerkag at 它在 Firefox 和 IE 中按预期工作 但在 Iro
  • Google Chart:如何绘制条形图的垂直线

    我正在尝试添加一条垂直线 以便当元素超过该值时可以在视觉上有所区别 Thanks
  • DatePickerDialog标题背景颜色

    我已经为 DatePickerDialog 背景设置了样式 它在 Nexus 5 Marshmallow 上的显示有所不同 我使用的风格是
  • 将 Antlr 语法树转换为有用的对象

    我目前正在考虑如何最好地获取使用 Antlr 生成的 AST 并将其转换为可以在我的程序中使用的有用对象 我语法的目的 除了学习之外 是创建一种可执行 运行时解释 语言 例如 我将如何获取属性子树并实例化特定的属性类 例如 以下代码用我的语
  • 有没有办法将 bash 中的输出重定向到具有不同过滤器的不同位置?

    如果我有一个过程a out我可以 a out grep foo查看由 foo 过滤的 a out 的标准输出 我也可以说 a out 2 gt 1 grep foo查看 foo 过滤的 err 和 out 随着tee命令我可以将标准输出发送
  • 从另一个类访问私有方法

    我有两个存储库类 RepositoryFactory and BaseRepository 在同一项目中实现不同的接口 这BaseRepository类有一个私有方法 现在另一个类中也需要该方法 具有相同的实现 我没有重复该方法以保持其私有
  • 带小数的负数的Javascript正则表达式

    我想测试这个输入 可选的负号 2 位数字 可选的 和一个可选的数字 如下所示 34 or 34 5333 or 34 53333 or 34 in JavaScript 这是我想出来的 但行不通 d 2 d 1 有人可以帮帮我吗 试试这个正
  • 使用 PHP 进行实时视频流传输

    我有一个 PHP AJAX MYSQL 聊天应用程序 我想将视频聊天添加到我的应用程序中 如何在 PHP 应用程序中创建用于实时视频会议 聊天的实时视频流 如果我想构建这样一个系统 我需要了解哪些关键术语 首先使用 PHP 是个好主意吗 有
  • 缩略图淡入淡出

    这是缩略图的标记 ul li a href videos img class thumb src images background thumb1 jpg alt a li li a href images background ibiza
  • Rails:构建捆绑器 gemfile 的选项

    我有一个宝石 必须使用一些选项来构建它 gem install pg with pg include Library PostgreSQL 9 0 include with pg lib Library PostgreSQL 9 0 lib
  • 我们如何将结果数据从 CodeIgniter 控制器传递到 AngularJS 控制器?

    我们如何将结果数据从 CodeIgniter 控制器传递到 AngularJS 控制器 在使用 jsonSuccess 代码的 CodeIgniter 控制器中 我将数据传递给 AngularJS 但我想传递不同的 3 个变量 我需要如何传
  • 当且仅当类模板会实例化时,变量模板才是正确的?

    假设我有一个类模板 A 它具有一个类型模板参数和一个主要特化 template
  • 如何在 React Query 中将 debounce 与 useQuery 一起使用?

    我正在使用 React Query 从 React 应用程序中的 API 获取数据 我想实现去抖以获得更好的性能 但我无法让它与 useQuery 一起使用 当我尝试将 API 调用包装在去抖函数中时 收到一条错误消息 查询函数必须返回定义