【发布时间】:2023-01-24 22:22:53
【问题描述】:
我有一系列组件,它们都使用从 RTK 查询响应派生的数据。虽然来自具有相同查询参数的相同响应,但每个组件都需要数据通过一组相对昂贵的客户端过滤器(其参数是 redux 存储切片属性),每个组件可能不相同。但是,所有组件都需要数据通过至少两个特定的过滤器。这种关系如下图所示:
是否可以订阅数据后它已经被一个特定的过滤器/一组过滤器转换了吗?
我考虑过的方法:
- 在所有组件中使用查询,在某些 useEffect 或 useMemo 中应用任何需要的过滤器。这不是可取的,因为这意味着至少有 2 个过滤器被复制 nComponents 次。
- 使用 createSlice
extraReducers选项并监听查询完成,然后执行过滤操作。这工作正常,因为我可以在减速器中使用过滤器参数,但我相信一旦过滤器参数已更新但查询数据保持不变,我就无法用新参数重复操作。 - 订阅一个组件,在每个对应的filter stage之后发布数据到slice, 为每个组件订阅相应的数据。这就是我目前实现它的方式,但它并不理想,因为它将我希望避免的组件耦合在一起,使一个任意选择的组件膨胀,并产生频繁的大状态动作,这会减慢我的应用程序。
- 提高对共享祖先组件的查询订阅,然后将数据作为道具传递。这并不理想,因为这些组件相对于它们的共同祖先处于不同的深度,我想这会导致至少对某些组件进行支柱钻孔。
- 使用 React 上下文与相应组件共享前 2 个过滤器操作的结果。还没有研究这么多;它可以与查询订阅一起使用吗?
直觉上,我认为一些作为 API 结果和组件订阅数据之间的中间件运行的回调是理想的。我知道 API 切片中可定义的 transformResponse 选项,但我认为它不适合或不可能用于这种情况。
const queryResult = endpointName.useQuery(args, filterArgs, (data, filterArgs) => {
return data.performSomeSharedFilterOperationHere(filterArgs);
}
);
理想情况下,数据会在查询参数更改或过滤器参数更改时更新。我想这与简单的 useEffect 实现之间的区别在于,在 useEffect 场景中,数据不是“共享”的,并且过滤器操作发生 nSubscribedComponents 次。
RTK 中是否有任何允许我正在寻找的行为的内容?
【问题讨论】:
标签: javascript reactjs redux redux-toolkit rtk-query