我已经安装了一个Gatsby客户端,它使用gatsby-source-contentful
插件连接到Contentful。我还连接了一个简单的自定义API,它使用gatsby-source-graphql
插件进行连接。
我想以编程的方式生成一堆具有动态部分(引用)的页面,作者可以根据自己的意愿添加和排序。
我确实使用...on Node
连接和我在每个动态部分中定义的片段来实现这一点。到目前为止一切都很顺利。
我的实际问题:
现在我有一个动态部分,它是一个Joblist。这个组件需要从内容API中获取数据,因为它存储诸如纬度和经度之类的值。因此,作者可以自由地在地图上设置一个点,并设置一个半径。我使用组件中的一个片段成功地从内容中获取了这些信息:
export const query = graphql `
fragment JoblistModule on ContentfulJoblisteMitAdresse {
... on ContentfulJoblisteMitAdresse {
contentful_id
radius
geo {
lon
lat
}
}
}`
但是,如何将此信息传递给另一个从自定义API中获取作业数据的查询?如果我正确地理解盖茨比,我就必须将这两个API连接在一起?或者我可以以某种方式运行另一个查询,以获取作为变量传入的这些值?我将如何并在何处实现这一目标?
我找不到任何方法,无论是在gatsby-node.js
内部(因为传递了上下文只能作为查询中的变量使用),还是在模板文件中(因为我一次只能运行一个查询),也不能在组件本身中找到任何方法(因为这只能接受staticQuery)。
我不知道我的误会在哪里。因此,我将非常感谢任何提示,帮助或例子。
发布于 2020-02-27 14:52:49
因为您的自定义API是graphQL API,所以您可以使用来自graphql-tools
包的delegateToSchema来完成这一任务。
您将需要使用盖茨比的setFieldsOnGraphQLNodeType API创建一个解析器。在此解析器中,您的解析函数将调用delegateToSchema
。
我们有一个类似的问题,我们的博客文章有一个包含ID的" author“字段,然后我们对另一个系统执行graphQL查询,通过该ID查找作者信息。
return {
remoteAuthor: {
type: person,
args: {},
resolve: async (source: ContentfulBlogPost, fieldArgs, context, info) => {
if (!source.author) {
return null
}
// runs the selection on the remote schema
// https://github.com/gatsbyjs/gatsby/issues/14517
return delegateToSchema({
schema: authorsSchema,
operation: 'query',
fieldName: 'Person',
args: { id: source.author },
context,
info,
})
},
},
}
这在我们的博客帖子类型中添加了一个“remoteAuthor”字段,每当它被查询时,这些选择就被代理到存在person
类型的远程模式中。
https://stackoverflow.com/questions/60062857
复制