问题标签 [rtk-query]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 使用 redux reducer 和 selector 连接 RTK Query API
我想我在 Redux 和 RTK 查询工具方面遗漏了一些东西。我也在为此使用 RTK Query OpenAPI codegen。
现在我有一个看起来像这样的 API ->
这让我在我的组件中恢复了标准化数据:
但是当我查看该选择器中的状态时,它看起来像:
在选择器中我真的想使用类似 ->
我的商店现在看起来像这样->
那么我是否需要data
直接将 from传递useGetMaterialsQuery
给函数并对其进行转换?
或者我可以以某种方式创建一个新的 reducer 切片,以某种方式正确初始化数据,以便我可以state.materials.byId
在选择器中访问?
还是我从根本上在这里遗漏了什么?
graphql-codegen - 如何在 RTK-Query 插件中向端点添加标头?
尝试遵循官方页面上相当稀疏的教程并没有让我走得太远。
我实际上是在尝试根据 api 调用的参数添加某个标头,但我不知道如何配置端点来这样做。
typescript - RTK 查询 createApi 导致:“属性 '....' 在类型 'Api 上不存在"
以下代码使用 RTK 查询创建 Redux Hook:
最后一行代码抛出 Typescript 编译时错误:
我的代码使用 Typescript 4.3.5改编自https://redux-toolkit.js.org/rtk-query/usage-with-typescript 。
我看不出它有什么问题。有任何想法吗?
reactjs - Redux-Toolkit 查询拦截器
我正在尝试为访问令牌因 RTK 查询而变得无效的情况构建拦截器。我已经通过文档中的示例构建了它,因此如下所示:
问题是token/refresh/
期望一个POST
带有刷新令牌的请求它的主体,我无法弄清楚如何重建这条线const refreshResult = await baseQuery('token/refresh/', api, extraOptions);
以使其接受参数并发出POST
请求。
javascript - 如何在 React Class 组件中获取 RTK Query API 端点状态(isLoading、错误等)?
好的,我想我已经阅读了几乎所有 RTK Query 的文档,并阅读了 RTK Query 的缓存。似乎它是其中相当大的一部分,即使它现在不是我需要的东西。
因此,我尝试在基于类的组件中使用 RKT Query 进行简单查询,然后从 Redux Store 中选择端点调用的 isLoading 状态。但是,目前在render() {}
myLoginPage.jsx
中,对 inside 的 调用endpoint.<name>.select()(state)
似乎不起作用。(见下面的代码)。mapStateToProps
LoginPageContainer.jsx
通过查看文档中关于在 classes 上使用 RTK Query的示例,看起来我在.select(<cache_key>)(state)
调用中缺少“缓存键”。但是,我还没有在我的端点中加入标签(我相信我还不需要它们)。
我的问题:
有人可以阐明在select()
React Hooks 之外使用的 RTK Query 生成的端点方法的正确用途是什么?我了解用于自动重新获取的缓存标记背后的想法(但这不太可能是什么问题),但我不确定我在这里缺少什么或什么缓存键只是为了在类组件中获取正在运行的端点查询状态. 感谢大家!
编码:
reactjs - 我应该将 RTK 查询结果放入商店吗?
试图了解 RTK Query 以及如何在 React 应用程序中以最佳方式使用它。
Search
我的应用程序的一部分中有一个组件。执行搜索时,我希望结果出现在另一个区域,远离组件树。
我在文档中看到的所有示例都会立即返回渲染结果,如果Search
和Result
组件不在同一位置,这是不可能的。如果我将结果解析到商店,这是不好的做法还是错过了 RTK 查询的要点?
redux-toolkit - BaseQueryFn 的 RTK-Query 条件类型
在 RTK 中,我使用自定义baseQuery
来包装 axios,遵循此处的一般指导。但是,我似乎无法找到一种使用条件类型的方法BaseQueryArg
。例如,我希望能够让我的 baseQuery 函数接受以下参数对象:
但是,而不是 have body
be any
,甚至是更严格的联合,我希望它取决于method
. 因此,例如,如果这是一个简单的函数,我会这样输入:
但是,我似乎找不到任何方法来为我传递给的函数使用这种类型,baseQuery
并让它正确地限制我的query
端点的返回类型。即使我不使用BaseQueryFn
实用程序类型,而是手动键入上述函数,然后将其传递给baseQuery
,我仍然没有得到query
我想要的对 return 的限制。
有没有办法做这种有条件的打字baseQuery
?
更新
根据下面接受的答案,处理此问题的最简单方法是使用有区别的联合方法,例如:
然后你的BaseQueryFn
类型就是BaseQueryFn<BaseQueryDiscriminatedArg>
javascript - Redux RTK Query:仅使列表中的单个元素无效
我为 RTK 查询定义了以下 API:
我想做的是,当成功调用 updatePost 时,它只会使单个帖子的缓存无效,并使用 getPost 查询而不是 getAllPosts 重新获取信息。这有可能吗?这些帖子显示在使用 getAllPosts 查询获取的表中。
redux - How to have a single Socket.IO connection and multiple streaming-updates RTKQ's based on different event types (channels) in multiple components?
I think that it is normal to use a single Socket.IO connection in the browser since I have a single Socket.IO server which handles both channels of information that I include in the messages.
The code below does not work well, it is not logically correct. I am a beginner when it comes to complex asynchronous programming.
I don't get errors, but the behavior of the code is not good enough.
I have this code that I tried but it does not receive messages from the server always when it should and I am sure it has some bugs. The following is a part of my code, modified a little bit so that I can post it here.
The types
The store
The RTKQ's
Example usage of RTKQ's
Update 1
Sometimes a second connection from the browser is created as I see in the Network tab in the DevTools.
I have checked and the issue seems to be somehow on the Socket.IO server: the client sends to the server "configure timers channel" message but it receives nothing. And the server sends to the client an array of numbers but... to the wrong client it seems, although I have only one instance of the app open in one single tab!
Update 2
I receive messages like this mostly at the start of a connection from the client. What are they?
Update 3
The problem is on the server.
If I replace this line:
with this line:
it sends the result of the computation to all the clients, including the one I can see, of which I think it is the only client. If not, the message does not reach the client I am testing with. I have no idea why, because I checked socket.rooms
and the socket is in the room identified by the socket.sessionUserId
and I call this for every socket on the server:
reactjs - 停止从 RTKQ 接收流式更新的正确方法是什么?
我试图调用一个取消订阅函数:
在本例中的await cacheEntryRemoved;
行之后。
函数定义如下:
(myIo
Socket.IO 客户端在哪里)
这目前对我不起作用。我目前正在调试这个问题。
我还尝试使用useEffect
带有返回清理函数的钩子在组件卸载时运行它,如下所示:
我想询问这些信息,因为我不确定我应该更多地研究这两个想法中的哪一个,或者我是否可以做另一件事更好。