【问题标题】:Relay JS only on client side仅在客户端中继 JS
【发布时间】:2016-01-04 19:35:08
【问题描述】:

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

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

感谢您的建议。

【问题讨论】:

    标签: reactjs graphql relayjs


    【解决方案1】:

    babel-relay-plugin 需要服务器端数据的架构,以便在将传送到客户端的 Javscript 中转换 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,我们可以通过调用 #to_json 方法轻松地将 graphql-ruby 模式转储到 json。你在 PHP 中可能有类似的方法。

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

    【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2015-09-28
    • 1970-01-01
    • 2013-10-31
    • 2017-11-12
    • 2020-04-30
    • 2011-06-06
    • 2020-07-17
    • 2019-11-18
    相关资源
    最近更新 更多