仅在客户端

时间:2015-10-07 14:06:37

标签: reactjs graphql relayjs

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

我仍然用Google搜索错误,我发现我需要安装Babel Relay插件。但要包含此插件,我必须指定一个架构。但是我仍然在服务器端指定了这个模式,为什么我还需要在客户端呢?有没有任何示例如何在服务器仍然实现时实现这一点(外部服务器,例如没有NodeJS服务器)。

感谢您的建议。

1 个答案:

答案 0 :(得分: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)进行了类似的设置。

  • 使用app/graph目录中的 graphql-ruby 类在我的服务器端定义数据模式
  • 使用脚本lib/tasks/graphql.rake将架构转换为JSON文件,然后将其存入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服务器之间的区别,如果它有帮助(https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152