我想在RTKQ查询完成后激发一些副作用.我认为最好的方法是在中间件中完成,但我不确定捕获此操作的正确方法是什么.

经过一些调试后,我最终得到了类似下面的东西,但对我来说它看起来有点老土.

const recreateTransferOnAppStartMiddleware: Middleware<unknown, RootState> = 
  storeApi => next => action => {
    const isFulfilledAction = action.type === `api/executeQuery/fulfilled`;
    const isGetUserAction = action.meta
      && action.meta.arg
      && action.meta.arg.endpointName === `getUser`;

    if (isFulfilledAction && isGetUserAction)
      recreateTransfers(storeApi);

    return next(action);
};

这段代码最大的问题是,在判断endpointNameaction.type时,它是基于字符串的.

推荐答案

经过深入研究,我发现可以直接访问端点匹配器:

const recreateTransferOnAppStartMiddleware: Middleware<unknown, RootState> = storeApi => next => action => {
    const isGetUserFulfilled = userApiSlice.endpoints.getUser.matchFulfilled(action);

    if (isGetUserFulfilled)
        recreateTransfers(storeApi);

    return next(action);
};

Typescript相关问答推荐

为什么在将条件返回类型的字符串赋给数字时没有类型错误?

如何使用Generics保留构造函数的类型信息?

VS代码1.88.0中未出现自动导入建议

如果在TypeScript中一个原始的类方法是递归的,如何使用类decorator 模式?

找不到带名称的管道''

Vue3 Uncaught SyntaxError:每当我重新加载页面时,浏览器控制台中会出现无效或意外的令牌

使用动态输出类型和泛型可重用接口提取对象属性

类型推断对React.ForwardRef()的引用参数无效

为什么TypeScrip不能解析对象析构中的赋值?

当数组类型被扩展并提供标准数组时,TypeScrip不会抱怨

Typescript,如何在通过属性存在过滤后重新分配类型?

在Thunk中间件中输入额外参数时Redux工具包的打字脚本错误

重写返回任何

作为参数的KeyOf变量的类型

有没有一种更好的方法来存储内存中的数据,而不是在类型脚本中使用数组和基于索引的函数?

使用RXJS获取数据的3种不同REST API

定义一个只允许来自另一个类型的特定字符串文字的类型的最佳方式

如何按成员资格排除或 Select 元组?

使用嵌套属性和动态执行时,Typescript 给出交集而不是并集

如何确定单元格中的块对 mat-h​​eader-cell 的粘附(粘性)?