You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux Toolkit设置skip参数后仍同时触发多个RTK Query请求如何解决

问题根因

首次渲染时useGetTestsQuery返回的data为undefined,此时第二个查询的skip: data判定结果为false,两个查询会同时触发,只有等第一个查询返回、data赋值后,第二个查询的skip才会生效,因此会出现两个请求并行的情况。

修复方案

方案1:优先走第一个查询,失败/无返回时再走第二个

调整第二个查询的skip逻辑,只要第一个查询正在请求、或已拿到有效数据,就跳过第二个:

const { data, isFetching, isSuccess, isError } = useGetTestsQuery(filters, {
    pollingInterval: 5000
});

const {
    data: testsByStatus,
    isFetching: fetchDataByStatus
} = useGetTestsByStatusQuery(filters, {
    pollingInterval: 5000,
    // 第一个有数据、请求中、请求成功时都跳过第二个,仅第一个失败时才触发
    skip: !!data || isFetching || (isSuccess && !isError)
});

return <Table columns={columns} dataSource={data || testsByStatus} />;

方案2:两个查询完全互斥

如果需求是任意一个查询返回数据后,另一个就不再触发,可给两个查询都加skip规则,同时给第一个查询设置优先级,避免初始并行:

const { data, isFetching: isFetchingFirst } = useGetTestsQuery(filters, {
    pollingInterval: 5000,
    skip: !!testsByStatus // 第二个有数据时跳过第一个
});

const {
    data: testsByStatus,
    isFetching: isFetchingSecond
} = useGetTestsByStatusQuery(filters, {
    pollingInterval: 5000,
    // 第一个有数据、或第一个正在请求中时,跳过第二个
    skip: !!data || isFetchingFirst
});

return <Table columns={columns} dataSource={data || testsByStatus} />;

优化建议

如果两个接口返回的结构可复用,更推荐直接在RTK Query的接口定义中用transformResponse参数将两个接口逻辑合并为一个查询,减少组件内的冗余判断。


内容的提问来源于stack exchange,提问作者Errand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:06:04