框架
版本

streamedQuery

streamedQuery 是一个辅助函数,用于创建一个从 AsyncIterable 流式传输数据的查询函数。数据将是收到的所有块的数组。在收到第一个数据块之前,查询将处于 pending(待定)状态,但在之后将转为 success(成功)状态。查询将在流结束前一直处于 fetching(正在获取)的 fetchStatus 状态。

要查看 streamedQuery 的实际应用,请查看我们在 GitHub 上的 examples/react/chat 目录 中的聊天示例。

tsx
import { experimental_streamedQuery as streamedQuery } from '@tanstack/react-query'

const query = queryOptions({
  queryKey: ['data'],
  queryFn: streamedQuery({
    streamFn: fetchDataInChunks,
  }),
})
import { experimental_streamedQuery as streamedQuery } from '@tanstack/react-query'

const query = queryOptions({
  queryKey: ['data'],
  queryFn: streamedQuery({
    streamFn: fetchDataInChunks,
  }),
})

注意: streamedQuery 目前被标记为 experimental(实验性),因为我们希望收集社区的反馈。如果您尝试过该 API 并有反馈意见,请在此 GitHub 讨论 中提供。

选项

  • streamFn: (context: QueryFunctionContext) => Promise<AsyncIterable<TData>>
    • 必需
    • 返回一个 Promise,该 Promise 包含要流式传输的数据的 AsyncIterable。
    • 接收 QueryFunctionContext
  • refetchMode?: 'append' | 'reset' | 'replace'
    • Optional (可选)
    • 定义了如何处理 refetch。
    • 默认为 'reset'
    • 当设置为 'reset' 时,查询将清除所有数据并返回到 pending(待定)状态。
    • 当设置为 'append'(追加)时,数据将被追加到现有数据中。
    • 当设置为 'replace'(替换)时,当流结束时,所有数据将被写入缓存。
  • reducer?: (accumulator: TData, chunk: TQueryFnData) => TData
    • Optional (可选)
    • 将流式传输的块(TQueryFnData)归约为最终的数据形状(TData)。
    • 默认:当 TData 是数组时,将每个块追加到累加器的末尾。
    • 如果 TData 不是数组,则必须提供自定义的 reducer
  • initialValue?: TData = TQueryFnData
    • Optional (可选)
    • 定义在获取第一个块时使用的数据。
    • 提供自定义 reducer 时是必需的。
    • 默认为空数组。