1

我用 laravel ( https://github.com/Folkloreatelier/laravel-graphql ) 开发了一个 graphql 服务器。现在我想使用 Relay 创建一个 React 应用程序。当我创建我的第一个组件时,我收到错误:未捕获错误:不变违规:RelayQL:运行时意外调用。要么未设置 Babel 转换,要么未能识别此调用站点。确保它被逐字用作Relay.QL.

我仍然用谷歌搜索了这个错误,我意识到我需要安装 Babel Relay 插件。但是要包含这个插件,我必须指定一个模式。但是我仍然在服务器端指定了这个模式,为什么我在客户端也需要这个?当仍然实现服务器(外部服务器,例如没有NodeJS服务器)时,是否有任何示例如何实现这一点。

感谢您的意见。

4

1 回答 1

4

babel-relay-plugin需要服务器端数据的模式来转换将传送到客户端的 Javscripts 中的 Relay.QL 片段。但是,请注意,在您的 GraphQL 服务器上,您在 Laravel GraphQL PHP 类中定义模式,您需要将其转换为babel-relay-plugin预期的 JSON 格式。

例如,我使用 Rails 和graphql-ruby ( https://github.com/nethsix/relay-on-rails ) 进行了类似的设置。

  • 使用目录中的 graphql-ruby类在我的服务器端定义数据模式app/graph
  • 使用脚本将架构转换为 JSON 文件lib/tasks/graphql.rake,然后将其存储到app/assets/javascripts/relay/data/schema.json
  • 指向schema.json你的babelRelayPlug.js文件中的任何地方(我的在assets/javascripts/relay/utils/babelRelayPlugin.js

对于 Rails,我们graphql-ruby只需调用#to_json方法即可轻松地将模式转储为 json。您可能在 PHP 中有类似的方法。

我比较了在 nodejs 服务器上设置 Relay 与在非 nodejs 服务器上设置 Relay 之间的区别,如果有帮助的话(https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152

于 2015-10-07T14:46:20.080 回答