防止Graphiql控制台发出多个自省查询

时间:2019-05-13 16:17:24

标签: reactjs graphql graphiql

我正在使用Graphiql组件来呈现控制台,并希望通过自省查询来获取架构。问题是,如果组件在解析第一个自省查询之前重新渲染(例如,打开了一个模态),则会触发第二个自省查询。鉴于这些查询对于后端来说很昂贵,我想避免这种情况。

是否可以避免多次自省查询?

1 个答案:

答案 0 :(得分:1)

GraphiQL组件接受schema道具:

  

schema:一个GraphQLSchema实例;如果不使用,则为null。如果提供了undefined,则GraphiQL将使用提取程序发送自省查询以生成模式。

您可以使用getIntrospectionQuery获取完整的自省模式,获取自省结果,然后使用它来构建模式。

const { getIntrospectionQuery, buildClientSchema } = require('graphql')

const response = await fetch('ENDPOINT_URL', {
  method: 'post',
  headers: { 'Content-Type': 'application/json' },
  body: { query: JSON.stringify(getIntrospectionQuery()) },
})
const introspectionResult = await response.json()
const schema = buildClientSchema(introspectionResult.data)

在呈现组件之前执行此操作,然后仅将架构作为道具传递。如果您的架构不会改变,您也可以将自省结果保存到文件中并使用该文件代替查询服务器。