我不明白为什么Reaction查询(在本例中由tRPC包装)会有这样的行为.

假设我们有一个组件,它进行两次API调用以获取一些数据.

export const MyComponent = () => {

  const sample1Result = api.myRouter.sampleRequest1.useQuery()
  const sample2Result = api.myRouter.sampleRequest2.useQuery()

  return (
    <div>
      <div> {sample1Result.data ? "Query 1 returned" : "Query 1 waiting"} </div>
      <div> {sample2Result.data ? "Query 2 returned" : "Query 2 waiting"} </div>
    </div>
  )
}

在后台,我们有两个API调用(配置在tRPC路由上),在本例中,它们被强制分别花费5秒和10秒.

 sampleRequest1: publicProcedure
     .query(async () => {
        console.log(`Called sampleRequest1`)
        await new Promise(resolve => setTimeout(resolve, 5000))
        console.log(`Returning from sampleRequest1`)
        return "Hello 1"
    }),
    
sampleRequest2: publicProcedure
    .query(async () => { 
        console.log(`Called sampleRequest2`) 
        await new Promise(resolve => setTimeout(resolve, 10000))
        console.log(`Returning from sampleRequest2`)
        return "Hello 2"
    }),

实际情况是,这两个查询都会像预期的那样立即启动.但是在组件中,我没有看到预期的5秒后"Query 1 Return"和10秒后"Query 2 Return".相反,当两个API调用都完成时,它们都只在10秒后更新组件.是什么导致Reaction-Query无法处理在不同时间完成以立即更新组件的并发查询?

从REACTION-QUERY和tRPC文档中,似乎暗示了并行性,实际上它是在并行调用API.但如果我不能立即得到每个查询的结果,那就不好了.FWIW,如果useQuery位于不同的react 组件中,或者即使我在Promise.all中使用并行Mutations ,这个问题仍然会发生.

推荐答案

我找到了我自己问题的答案.TRPC会自动对请求进行批处理.通常我猜这是有帮助的,但对我来说不是这样.

以下是禁用批处理的指南,它具有使每个请求独立发送和响应的预期结果.https://trpc.io/docs/v9/links#disabling-request-batching

Reactjs相关问答推荐

避风港访问端口以包含Reaction应用程序

使用useReducer时,props 未从父级传递给子或孙级

react 路由GUGUD Use Effect无法通过useNavigate正常工作

如何在NextJS中仅在刷新页面和页面淡出页面过渡时添加全屏加载器

当我try 部署我的Reaction应用程序时,为什么在此PrevState语句中收到语法错误?

当项目开始时,它不会从三元运算符(REACT)加载一些tailwind 类名称

如何使我的代码可以接受我想要的每一个链接

Antd V5组件自定义主题

React js拖放图像并预览

.populate() 方法在 mongodb 中不起作用

React 为什么标签导致 onClick 事件运行 2 次?

当 URL 与我声明的任何路由都不匹配时,如何使用不会重定向到错误页面的动态 URL? - react 路由 dom

Yup.number().integer() 不将 1.0 视为小数,如何解决这个问题?

React中useAuthenticator的authState在成功登录后仍保持未认证状态 - 需要强制刷新

React设置上下文并进行导航

页面不显示

React Router v6 - 访问嵌套路由和处理手写 url 的正确方法

列表应该有一个唯一的关键props

npm init vite@latest 和 npm init vite 有什么区别?

我可以在类组件中使用 useState 挂钩吗?