@ apollo / react-hooks useQuery中缺少道具映射器

时间:2019-09-23 13:18:38

标签: react-apollo

在较旧的react-apollo和现在的@apollo/react-hoc中,可以通过传递函数将API的响应映射为另一种格式:

  

config.props属性允许您定义一个映射函数,该函数接受道具并计算新的道具

此功能提供了一种通过在其他位置定义Apollo HOC来从组件中删除丑陋的转换代码的方法,并且由于它仅在数据更改时才运行,因此无需备注。

我看不到如何用useQuery来做到这一点。挂钩只能直接在React组件(Rules of Hooks)内部使用,所以我能想到的只是:

import { fooQuery, mapFoo } from 'api';
...
const { data } = mapFoo(useQuery(fooQuery))

这可能是可以接受的,但是它在每个渲染器上运行mapFoo,而在useMemo上它变得太多了:

const bar = useQuery(barQuery); // unwanted value
const memoBar = useMemo(() => mapBar(bar), [bar])

我也没有找到其他人寻找该丢失的功能,因此我想知道是否丢失了某些东西。还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

我猜想props的遗漏是有意的,并且重写这些转换/存储的HOC而又不会造成组件混乱的现代方法是为每个查询创建一个自定义的挂钩,以封装useQuery和useMemo。