reactjs - 使用 TypeScript 反应 Apollo useQuery 钩子
问题描述
我正在尝试useQuery
使用 TypeScript。
这是我的查询
export const FETCH_LINKS = gql`
query FetchLinks {
feed {
links {
id
createdAt
url
description
}
}
}
`;
我从 GraphQL 模式生成了类型graphql-codegen
export type Feed = {
__typename?: 'Feed';
links: Array<Link>;
count: Scalars['Int'];
};
export type Link = {
__typename?: 'Link';
id: Scalars['ID'];
createdAt: Scalars['DateTime'];
description: Scalars['String'];
url: Scalars['String'];
postedBy?: Maybe<User>;
votes: Array<Vote>;
};
在我的组件中,我将类型应用于useQuery
钩子
const { data, loading, error } = useQuery<Feed>(FETCH_LINKS);
问题是在data
变量中我收到以下形状的对象:
{
feed: {
__typename
links
count
}
}
因此,为了遍历链接数组并将它们呈现在页面上,我需要这样做,data.feed.links.map()
但Feed
类型上没有feed
属性,因此,我收到一条错误消息Property 'feed' does not exist on type 'Feed'
如何纠正这种不一致
解决方案
如果您查看文档,您会发现您需要再创建一个接口来表示数据:
interface FetchLinksData {
feed: Feed[];
}
在组件中,您可以像这样使用它:
const { data, loading, error } = useQuery<FetchLinksData>(FETCH_LINKS);
const feeds = data.feed;
推荐阅读
- sql - PostgreSQL 事务中输入末尾的语法错误
- r - 将 2 个变量分组,然后分隔字符串
- html - 从网页进行 UDP 广播搜索
- python - 如何通过模型视图集上的列表/检索功能进行过滤
- javascript - 如何将负二进制数转换为int?
- android - 在没有客户端的情况下在 system_server 上运行 Frida hooks
- c# - 如何在使用 IronPdf 合并两个 PDF 时使文件变平?
- facebook - Facebook设置“提示访问者发送消息”不是播种
- php - 如何将 PHP 与 HTML 表单结合起来制作一个工作页面?
- python - 使用 Python 的 Bigtable 模拟器和 Google 发现资源