使用 React Query 过滤从 API 获取的列表

2024-01-14

我正在使用 React Query(第一次)来管理对 API 的调用。我正在获取发票列表,到目前为止我已经在下面的代码中成功完成了此操作。我现在想根据每个发票对象具有的状态属性(它是“已付款”、“待处理”或“草稿”)使用一系列复选框来过滤此列表。

我该怎么办呢?过滤是否可以以某种方式集成到对 API 的初始调用中,以便我始终接收一组数据,或者我是否必须进行多次调用并在下面相应地呈现数据?

import React from 'react'
import {useQuery} from 'react-query'
import InvoiceLink from './InvoiceLink'

const fetchData = async () => {
    const res = await fetch('http://localhost:3004/invoices');
    return res.json();
};


export default function InvoiceList() {
    const {data, isLoading, isError} = useQuery('invoices', fetchData);
    return (
        <div>
            <ul>
                <li><input type="checkbox" id="paid"></input><label htmlFor="paid">Paid</label></li>
                <li><input type="checkbox" id="pending"></input><label htmlFor="pending">Pending</label></li>
                <li><input type="checkbox" id="draft"></input><label htmlFor="draft">Draft</label></li>
            </ul> 
            {isError && (
                <p>Error</p>
            )}
            {isLoading && (
                <p>Loading</p>
            )}
            <ul>
            {data && data.map(item => 
                <InvoiceLink key={item.id} invoice={item} />
            )}
            </ul>
        </div>
    )
}

您可以按照描述进行本地过滤here https://stackoverflow.com/a/66810705/8405310,或者,如果您想在后端进行过滤,您需要:

  • 将过滤条件保存在本地状态
  • 将过滤条件添加到query-key以触发自动重新获取(每次key更改时react-query都会重新获取)
  • 将过滤条件传递给 fetchFn,然后传递给后端
  • 潜在用途keepPreviousData: true为了更好的用户体验 - 请参阅滞后查询 https://react-query.tanstack.com/guides/paginated-queries#better-paginated-queries-with-keeppreviousdata

就像是:

const fetchData = async (filter) => {
    const res = await fetch(`http://localhost:3004/invoices/${filter}`);
    return res.json();
};

const [filter, setFilter] = React.useState('all')
const {data, isLoading, isError} = useQuery(['invoices', filter], () => fetchData(filter));

另外,我想指出的是,由于您正在使用fetch,您需要将错误的响应转换为失败的承诺,因为react-query期望失败的承诺,但是fetch并没有开箱即用。请参见here https://react-query.tanstack.com/guides/query-functions#usage-with-fetch-and-others-clients-that-do-not-throw-by-default

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

使用 React Query 过滤从 API 获取的列表 的相关文章

  • React router - 将路由上的 props 传递给子组件

    有人可以告诉我最好的方法吗 我想将页面标题道具从我的路线传递到我的标题子组件中 这是我的路线 var sampleApp React createClass render function return div div
  • react-hook-form:检查未保存的更改

    我有一个由以下人员控制的预填写表格react hook form https react hook form com const control handleSubmit formState setValue reset useForm
  • “ReactNode”不是有效的 JSX 元素

    我有以下代码 代码沙箱 https codesandbox io s react typescript forked 50beyp file src App tsx import ComponentType ReactNode from r
  • 获取React组件的类型propTypes定义

    假设有以下代码 TestComponent propTypes text React PropTypes string myEnum React PropTypes oneOf News Photos 我在另一个文件中执行了以下操作 使用
  • React 不响应按键事件

    我正在尝试实现一些非常基本的按键检测 但我根本无法让它工作 我有一个裸露的组件 应该在onKeyDown事件 但控制台中没有任何内容被注销 class App extends React Component constructor prop
  • Nextjs 无法在生产环境中的“.next”目录中找到有效的构建

    我正在 docker 中运行我的应用程序 但我的生产构建和启动脚本仅在 docker 环境中失败 虽然node env开发在docker环境下运行良好 这是我的脚本 无法进行生产构建并启动服务器 我正在使用nodemon和babel bui
  • Material UI - 更改主题中的按钮文本颜色

    我在直接在 Material UI 主题中更改按钮文本颜色时遇到问题 更改主色 按钮字体大小效果很好 因此问题不在于传递主题 这是我的代码 import React from react import MuiThemeProvider cr
  • 提及列表和表情符号顶部位置 (Draft.js)

    您能帮我如何将其位置从下到上更改吗 我想在文本顶部而不是底部显示提及列表 关于表情符号列表的同样问题 示例链接 https www draft js plugins com plugin emoji 你可以通过以下方式实现它position
  • React Router v4 的优点

    除了能够在 NavLink 上设置 activeClassName 和 activeStyle 之外 还有什么理由使用NavLink over Link在您的网站上不需要活动状态 类的非导航元素 即不是页眉或页脚中的主导航 上创建指向其他路
  • 使用 jestjs 时模拟 sessionStorage

    好的 我有一个简单的示例 React 组件 它与会话存储 https developer mozilla org en US docs Web API Window sessionStorage App jsx var React requ
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 创建反应应用程序:npm 错误!解析“...”附近时 JSON 输入意外结束

    描述错误 npx create react app my app不适合我 我试过npm cache clean force但我一次又一次地遇到同样的错误 重现步骤 npm cache clean force npm npx create r
  • 在react中使用map方法渲染JSON API

    我对 JSON 对象 数组和映射方法的语法和结构有困难 我是 React 新手 正处于学习的初始阶段 这是我粘贴在下面的 JSON 文件代码 cloud Asia availability last15Min 100 last24Hour
  • React - 如何在不使用构造函数的情况下访问道具

    注意 我在使用 React Native 时遇到了这个特定问题 但我想这也适用于 React 我有一个使用 React Component 构建的反应组件 我不需要设置状态 但我确实有道具 我建议的语法如下 class Header ext
  • 如何删除原生选项卡的边框

    我需要删除图像中标记的边框 我正在使用react native 和native base 选项卡 我需要删除选项卡的底部边框
  • 如何正确使用react-router-dom中的useHistory()?

    如何使用useHistory 正确吗 我无法从一个反应组件过渡到另一个反应组件 根据 React 文档以及 Stack Overflow 上的说明 我无法从 App js 转换到 MyComponent js 例如 我正在尝试 App js
  • 卸载 React 时删除事件监听器

    我有更高阶的组件 反应如下 export default function InnerComponent class InfiniteScrolling extends React Component constructor props s
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • React onClick 事件仅在渲染组件时触发

    动态渲染组件的 onClick 函数应通过 useState 设置所选日期 imgs 上的 onClicks 完全按照您的预期工作 没有任何问题 即使只是在其位置放置一个带有 onClick 属性的 div 也是行不通的 当组件渲染时 on
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro

随机推荐

  • 使用 DTO 和 WPF 时是否需要实现 INotifyPropertyChanged?

    我的问题相当简单 标题中已经提出了 上下文如下 我有一个包含实体和存储库的域 查询的结果被映射到 DTO 并发送到 GUI GUI 是使用 WPF 实现的 对于映射 我需要实现 INotifyPropertyChanged 的 类 我的第一
  • C++ 中的 Unicode 到 UTF-8

    我搜索了很多 但找不到任何东西 unsigned int unicodeChar 0x5e9 unsigned int utf8Char uni2utf8 unicodeChar utf8Char assert utf8Char 0xd7a
  • PluginRegistry无法转换为FlutterEngine

    当我将 flutter 更新到版本 1 12 13 时 我发现了这个问题并且无法修复它 我按照发送的 firebase messaging 教程进行操作并收到以下错误 错误 类型不兼容 PluginRegistry 无法转换为 Flutte
  • 覆盖应用程序根 URL 的真正作用是什么?

    整个互联网上我唯一能找到解释的地方是MSDN https msdn microsoft com en us library aa983445 aspx 指定应用程序根 URL 的备用路径 用这个 如果 Web 应用程序根目录不是您的项目的根
  • 在 iText PDF 文档中安装 JTable

    我有一个JTable有四列 我正在使用 iText 库打印包含 JTable 数据的 PDF 文档 问题是 JTable 在 PDF 中无法正确显示 我在谷歌上搜索并发现这里同样的情况 http tiku io questions 4204
  • Arrays.asList(...).contains(...) 如何工作?

    我有以下代码 String weekEnds 0 6 for int i 0 i lt 7 i if Arrays asList weekEnds contains i System out println I am in the arra
  • 如何标准化 SVG 路径数据(跨浏览器)?

    我试图找到一种方法来实现跨浏览器路径标准化器 有一种描述的本地方式here http www w3 org TR SVG paths html svg SVGAnimatedPathData normalizedPathSegList功能示
  • SwiftUI 覆盖详细视图中的导航栏外观

    我有一个超级简单的 SwiftUI 主从应用程序 import SwiftUI struct ContentView View State private var imageNames String var body some View N
  • Maven部署打包并上传到AWS-Lambda

    我在将 Maven 部署包上传到 Amazon s3 时遇到问题 从 Eclipse 中 我能够成功生成 jar 文件 但是在上传到服务器时遇到问题 这是我的Java代码 package main java mavantestproj im
  • XSD 转 UML 命令行工具

    我想知道 是否有人遇到过任何命令行工具 优先免费 用于将 xml 模式 xsd 转换为 UML 图 xsd 用于表示类 因此 UML 类图就适合该目的 我对命令行工具更感兴趣 因为我想让它成为一个自动任务 因此我宁愿不必打开 UI 来执行它
  • DateTime.UtcNow 和 DateTime.Now.ToUniversalTime() 之间有什么区别

    对我来说它们都是一样的 UtcNow 只是一个快捷方式吗 事实上恰恰相反 这Now属性实现为 public static DateTime Now get return UtcNow ToLocalTime
  • 使用文档字符串和“未实现”异常预填充 Eclipse 和 Pydev 中的新函数

    我正在使用 Eclipse 和 Pydev 编辑 Python 源代码 我想记录我的所有函数 并在函数尚未实现时引发 未实现 异常 例如当我输入 def foo bar1 bar2 输入时 我希望它自动完成 def foo bar1 bar
  • 在 Vim 中控制选项卡名称

    在 MacVim 中 选项卡的名称似乎设置为该选项卡中最近打开的缓冲区的名称 这会在使用拆分时造成混乱 如何将选项卡名称固定到选项卡中的左上角窗口 以下函数返回左上角窗口中加载的缓冲区的名称 function GuiTabLabel ret
  • 碰撞后立即停止刚体运动/旋转

    我希望我的球体从一个位置跳到另一个位置 但不希望它随后平移 我不知道该怎么做 这是我的代码 void Update if thrown Input touchCount gt 0 Input GetTouch 0 phase TouchPh
  • 加入一组具有超时的 python 进程

    我正在使用 python 的多处理库来创建多个进程 from multiprocessing import Process processes Process target function for function in FUNCTION
  • 使用变量与文字时远程查询速度很慢

    我到处寻找这种情况 但找不到解决方案除了动态 SQL 我不想使用它 这是我想要在服务器 2 上更新的表 Stuff Id UNIQUEIDENTIFIER stuffname NVARCHAR 64 我需要从服务器 1 更新它 所以我一直在
  • 使用 np.divide (以及其他浮点数)将 0 除以 0 时如何抑制错误消息?

    我的尝试 import numpy as np np seterr divide ignore a np array 4 3 0 0 b np array 1 0 0 np divide a b 我得到的输出 main 1 RuntimeW
  • 如何在张量流中并行加载数据?

    首先我先介绍一下我的申请背景 我的磁盘中有大约 500 000 个以 avi 文件形式保存的视频 我将使用它们作为训练样本 要使用它们 我们可以将它们同时加载到内存中 然后将每个批次输入模型进行试验 这是最简单的方法 然而我的记忆是NOT足
  • 调用未定义的方法 Illuminate\Database\Query\Builder::save()

    我试图在现有记录上调用 Eloquent 的 save 方法 但从 Illuminate 的查询生成器中收到错误 按照 Laravel 网站上的文档进行操作http laravel com docs eloquent insert upda
  • 使用 React Query 过滤从 API 获取的列表

    我正在使用 React Query 第一次 来管理对 API 的调用 我正在获取发票列表 到目前为止我已经在下面的代码中成功完成了此操作 我现在想根据每个发票对象具有的状态属性 它是 已付款 待处理 或 草稿 使用一系列复选框来过滤此列表