1

laravelを使用してgraphqlサーバーを開発しました(https://github.com/Folkloreatelier/laravel-graphql)。Relayを使用してReactアプリケーションを作成したいと思います。最初のコンポーネントを作成すると、「Uncaught Error: Invariant Violation: RelayQL: Unexpected invocation at runtime.」というエラーが表示されます。Babel 変換が設定されていないか、この呼び出しサイトを識別できませんでした。として逐語的に使用されていることを確認してくださいRelay.QL

私はまだエラーをグーグルで検索し、Babel Relay Plugin をインストールする必要があることを認識しました。しかし、このプラグインを含めるには、スキーマを指定する必要があります。しかし、私はまだサーバー側でこのスキーマを指定しています。なぜクライアント側でもこれが必要なのですか? サーバーがまだ実装されている場合にこれを実装する方法の例はありますか (外部サーバー、NodeJS サーバーなど)。

アドバイスありがとうございます。

4

1 に答える 1

4

サーバー側のデータのスキーマは、クライアント側に配信される Javascript 内の Relay.QL フラグメントの変換を行うために、 babel-relay-pluginによって必要とされます。babel-relay-pluginただし、GraphQL サーバーでは、Laravel GraphQL PHP クラスでスキーマを定義することに注意してください。これを期待される JSON 形式に変換する必要があります。

たとえば、Rails とgraphql-ruby ( https://github.com/nethsix/relay-on-rails ) で同様のセットアップを行いました。

  • ディレクトリ内のgraphql-rubyクラスを使用して、サーバー側でデータスキーマを定義しますapp/graph
  • script を使用してスキーマを JSON ファイルに変換し、lib/tasks/graphql.rakeそれを stash します。app/assets/javascripts/relay/data/schema.json
  • ファイル内の をポイントしschema.jsonますbabelRelayPlug.js(私のファイルは にありますassets/javascripts/relay/utils/babelRelayPlugin.js)

Rails の場合、メソッドを呼び出すだけで簡単にgraphql-rubyスキーマを jsonにダンプできます#to_json。PHP にも同様のメソッドがあるかもしれません。

nodejs サーバーで Relay を設定する場合と、nodejs 以外のサーバーで設定する場合の違いを比較しました

于 2015-10-07T14:46:20.080 に答える