未处理的GraphQL订阅错误ReferenceError:未定义文档

时间:2019-11-04 22:21:14

标签: reactjs react-native graphql apollo

我正在尝试通过我的React Native应用和Rails Graphql服务器设置订阅,但出现以下错误消息

  

未处理的GraphQL订阅错误ReferenceError:未定义文档

我怀疑我使用的一个库正在使用文档,但是不确定哪个库和示例库是为React应用而不是React Native设置的。

我遵循了本指南:https://haughtcodeworks.com/blog/software-development/graphql-rails-react-standalone/

这是我的app.js设置

...

const httpLink = createHttpLink({
  uri: `${global.URL}/graphql`,
})

const cable = ActionCable.createConsumer('ws://localhost:3000/cable')

const hasSubscriptionOperation = ({ query: { definitions } }) => {
  return definitions.some(
    ({ kind, operation }) => kind === 'OperationDefinition' && operation === 'subscription',
  )
}

const link = ApolloLink.split(
  hasSubscriptionOperation,
  new ActionCableLink({cable}),
  httpLink
)
const client = new ApolloClient({
  link: link,
  cache: new InMemoryCache()
})

return (
  <ApolloProvider client={client}>
    <Root />
  </ApolloProvider>
)

我愿意共享更多代码,但由于我不确定错误可能来自何处,因此我首先需要一些指导。

2 个答案:

答案 0 :(得分:1)

正如Ben提到的,该教程是针对React而不是React Native的,但是它确实使用了Apollo,因此我设法通过使用而不是使用 _subscribeToNewLinks 方法来使其工作Apollo useSubscription挂钩,它起作用了!但是,我仍然遇到频道传输每次都无法正常工作的问题。

const { data: subscriptionData, _error, _loading } = 
  useSubscription(NEW_LINKS, {
  shouldResubscribe: true,
  onSubscriptionData: () => refetch()
})

答案 1 :(得分:0)

您显示的指南不是针对本机响应,而只是针对 AND react-dom。我认为您已经知道这一点,这就是为什么您删除了document.getElementById('root')的原因,但是由于某种原因,您不知道graphql-ruby-client需要DOM。它依赖于文档,并且在本机响应中,全局范围内没有document对象。仅在浏览器中可用。

我建议使用其他graphQL客户端,例如Apollo Client