在RTK Query中能否集中处理不同端点的isLoading状态?
RTK Query 多Mutation加载状态集中处理方案
你的当前用法是完全正确的,这是RTK Query中处理单个mutation加载状态的常规方式,但确实有更简洁的集中处理方案,不用逐个解构每个mutation的isLoading:
使用官方提供的useIsLoading钩子
RTK Query的@reduxjs/toolkit/query/react包提供了useIsLoading钩子,可以批量监听指定mutation(或query)的加载状态,只要其中任意一个处于加载中,就会返回true。
示例代码
假设你在API Slice中定义的mutation端点名称就是fetchById和sendId,可以这样使用:
import { useIsLoading } from '@reduxjs/toolkit/query/react'; // 在组件内获取集中的加载状态 const isAnyMutationLoading = useIsLoading({ mutation: ['fetchById', 'sendId'] }); // 直接传入Loader组件 <Loader blocked={isAnyMutationLoading} fullScreen />
进阶用法:监听所有Mutation
如果想监听当前应用中所有RTK Query mutation的加载状态,甚至不需要指定具体端点,直接传mutation: true即可:
const isAnyMutationLoading = useIsLoading({ mutation: true });
关于手动存Redux Store的思路
这个方案完全没必要,RTK Query已经内置了对所有mutation/query状态的管理,useIsLoading就是官方为这类场景提供的便捷工具,手动维护状态不仅冗余,还容易出现状态不同步的问题。
内容的提问来源于stack exchange,提问作者Metalwell
相关产品推荐
相关产品推荐

