reactjs - 在react-query中过滤数据

标签 reactjs react-query

我需要在我的组件中过滤电影。初始查询必须是所有电影。在我单击按钮(按钮名称例如历史/喜剧)后,我在 react 组件中呈现的数据必须更改为仅包含历史或喜剧电影的此类查询的数据。我如何在react-query中实现这一点。

最佳答案

理想情况下,过滤应该在后端进行。这样,您只需将过滤后的电影的名称作为查询键的一部分即可。如果键发生变化,React Query 将自动重新获取,并且还会单独缓存每个条目过滤:

const [name, setName] = React.useState()
const { data } = useQuery(['movies', name], () => fetchMovies(name)))

如果后端不做过滤,可以直接对useQuery返回的数据进行过滤:

const [name, setName] = React.useState()
const { data } = useQuery(['movies'], () => fetchMovies()))

const result = filterByName(data, name)

这很适合自定义 Hook 。

如果需要引用稳定性,可以将结果创建包装在useMemo中:

const result = React.useMemo(() => filterByName(data, name), [data, name])

您还可以利用react-query的select选项:

const [name, setName] = React.useState()
const { data } = useQuery(
  ['movies'],
  () => fetchMovies()),
  {
    select: (response) => filterByName(response, name)
  }
)

在这种情况下,从 useQuery 返回的数据已经被过滤了,你不必担心内存。

关于reactjs - 在react-query中过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70904680/

相关文章:

reactjs - 如何使用 react-query 的关注点分离(在干净的架构上下文中)

reactjs - 在 react 查询中处理未经授权的请求

javascript - 映射对象抛出错误 "TypeError: Cannot read property ' 状态'未定义”

javascript - 我想从组件外部运行 tanstack React 查询,因为我不能在那里使用 useQuery?

javascript - 在我通过 Redux 传递它的特殊情况下,这个箭头函数如何工作

reactjs - 无法读取未定义、react-app-rewired 的属性 'use'

javascript - React-query:在获取数据时显示加载微调器

reactjs - AxiosResponse 和 UseQueryResult 类型错误

reactjs - 从 Remix 中的多个 API 获取数据

javascript - React JSX 中的自定义 HTML 元素标记