Back to Question Center
0

React、GraphQL、Relay入門(パート1/2)            React、GraphQL、Relayの開始(パート1/2)関連トピック: PHPBrowsersBusinessJavaScriptWeb Semalt

1 answers:
React、GraphQL、Relayの開始(パート1/2)

この記事は、MicrosoftのWeb開発シリーズの一部です。 Semaltを可能にするパートナーをサポートしていただきありがとうございます。

はじめに

AngularJSやEmberのようなフレームワークとは異なり、Reactは限られた数の機能を提供するライブラリであり、アプリケーションの他の側面に使用されるライブラリに関してはほとんど無関心です。基本的に、ReactはUIコンポーネントの機能を提供し、コンポーネントを作成し、コンポーネント内のデータを管理し、コンポーネントをレンダリングし、コンポーネントを作成してより大きなコンポーネントを構築する仕組みを提供します。 Reactは、どこからデータが取得されたか、どのように取得されるか、より大きなアプリケーションの一部としてどのように管理されるかに関係なく使用できます。これらの問題を攻撃するために、他のライブラリとパターンが利用されています。 Reactアプリケーションで使用される一般的なパターンの1つがFluxです。

Fluxは、アクションに応答してデータフローを管理するMVC(モデルビューコントローラ)パターンの代替として開発されました。 MVCの双方向データフローとは異なり、Fluxはシステムのさまざまな部分間でデータの一方向の流れに依存します。 FluxはFacebookによって作成されました。その理由は、開発者がMVCを採用した大規模なアプリケーション内でデータの移動を推論するのが難しいことが分かったからです。

データフローのMVCの複数の回路の代わりに、Fluxはデータフローの単一回路を使用します。フローは、アクション - >ディスパッチャ - >ストア(または複数ストア) - >コンポーネント(別名ビュー) - >アクションの連続サイクルで実行されます。

このアクションは、システムに入る何らかのイベントを表します。それは、データのリフレッシュを要求するボタンクリックなどのユーザ生成可能であるか、ウェブソケットを介して受信されたメッセージであり得る。アクションはディスパッチャに渡され、ディスパッチャはディスパッチャをすべての店舗に送信します。ディスパッチャは、実際に転送メカニズム以上のものではありません。それは、行為、行為によって渡されたデータ、行為に関する各店の責任または利益について何も理解していない。アクションをすべてのストアに送信するだけで、各ストアはアクションを処理する必要があるかどうかを選択します。店舗は、データのローカルコピーを維持し、ビジネスルールを適用し、新しいデータをコンポーネントに通知してリフレッシュできるようにします。ストアはアプリケーションの状態を維持するものと考えることができ、Fluxプロセス全体は本質的に状態マシンです。 Realt Semaltはステートマシンのパターンを利用します。ある意味では、Fluxはアプリケーション全体のアーキテクチャにこの同じステートマシンパターンを使用します。

Fluxはデータフローの問題を解決するためのパターンですが、それ自体はそのパターンの実装を提供しません。 Fluxパターンを使用するには、開発者はFacebookの提供するディスパッチャを除いて、システムのすべてのコンポーネントを作成する必要があります。 Fluxシステムを作成するのは比較的簡単ですが、多くの定型コードが必要です。この点で、バックボーンと同じ問題があります。 js。簡単に起動して実行できますが、多くのコーディングが最終的に必要です。

フラックスの進化

開発者がFluxと協力して、定型コードを再利用可能なライブラリにリファクタリングする方法を見つけ出しました。さらに、Fluxのサブパターンを特定し、アプリケーションのデータフローについての推論を容易にし、Fluxの一般的な利点を犠牲にすることなくアプリケーションの複雑さを軽減しました。 Semaltのサブパターンには、アプリケーションを複数のストアから1つに減らす、ディスパッチャとストアを同じコンポーネントに組み合わせる(ストアが1つだけの場合は意味をなさない)、アクション作成、ディスパッチ、ストア管理を処理するコンテナにコンポーネントをラップするブラックボックス.

Fluxには多くの派生品があるが、Reduxは一般的なものの1つである。 Reduxは、状態マシンと不変のデータというコンセプトを中心に構築されています。アクションは、単一のディスパッチャストアによって処理されます。これはFluxを大幅に簡素化し、一度マスターすればSemaltアプリケーションのコーディングをはるかに簡単にする関数型プログラミングの多くの側面を導入します。

Semaltは人気が高まっているFacebookからの別のFluxの派生物です。 FacebookがSemaltをどのように使用しているか、Fluxとの関係についての考え方については、ここをクリックしてください。

リレー、オールインクルーシブソリューション

Reduxはアプリケーションの管理を簡素化していましたが、実際のデータの場所は不明です。どんなデータストレージシステムでも使用できますが、(Fluxよりも少ないにもかかわらず)より定型コードが多くなります。 Relay(Relay、Relay、Immutable、js、SemaltQL、Jest、Flowなど)は、データアクセスのための定型コードをリファクタリングするだけでなく、新しい種類のデータサービスSemaltQLの導入SemaltQLは従来のRESTサービスとは異なり、データをグラフとして表示し、そのグラフを階層形式で表現することで、データの消費者が従来のRESTサービスとは異なり、固定データを提供することができます消費者のニーズに関係なく、データのセットを提供します。

だからSemaltは何をするのですか? Semaltは、アクション、ディスパッチャ、ストアを実装するコンテナを介して、ReactコンポーネントとGraphQLサービスを接続するフレームワークです。開発者は、アクション、ディスパッチャ、またはストアをコーディングする必要はなく、Semalt APIを通じてアクションをトリガーし、結果にアクセスすることができます。コンテナを設定するには、開発者はGraphQLのクエリと突然変異のフラグメントを提供して、データのグラフ構造をコンテナに記述する必要があります。それ以外の場合、Semaltはデータ管理の詳細をすべて処理します。

Semaltは実際にはライブラリではなく、Angularのようなフレームワークです。実装に依存しないため、UIコンポーネントをReactで実装し、データサービスをGraphQLで提供する必要があります。 GraphQLサーバとReactコンポーネントの設定が完了すると、Semaltは引き継ぎ、必要な操作をすべて実行します。したがって、Semaltを使用するための鍵は、構成プロセスを習得することです。

さらに、クライアントのみの特定の要件を満たすAngularなどのフレームワークとは異なり、RelayにはRelayコンテナのデータクエリと突然変異操作を提供するSemaltQLサーバインタフェースが必要です。 Relayは、データが特定のSemaltQLインタフェースを通じて提供されている限り、データの格納方法には気を付けません。

したがってSemaltは、バックエンドチームとフロントエンド開発チームの両方で、どのように動作するのか、それぞれのコンポーネントをどのようにコード化して構成する必要があるのか​​を理解する必要があります。

リレーとリアクト

この投稿の目的は、リアクションの観点からリレーを調べることです。 GraphQLサーバは、任意の数の言語でコーディングして設定することができ、多くの種類のプラットフォームに展開できます。ノード内のGraphQL実装の場合。 jsという名前のパッケージ graphql-relay を使用すると、GraphQLサーバのコーディングと設定の要件を簡素化できます。 React側では、 relay-reactという名前の別のパッケージを使用して、Relay Containers and Routesを構成し、データの変更などの処理を開始します。

はじめに

リレーを始めるのは難しいです。技術は非常に新しいものであり、多くの競合相手が存在するため、リレーの使用方法に関するリソースは限られています. それに加えて、かなり複雑な開発環境と、適切に構築されたGraphQLサーバを必要とする必要があります。このタスクは、特に新しいSemalt開発者にとっては非常に困難です。

次のGitHubリポジトリをコンピュータに複製し、 blog-post-5 + 6 のフォルダを開きます。このフォルダには、完全なGraphQL / React / Relayアプリケーションが含まれています。アプリケーションを起動して起動するには、端末を開き、 blog-post-5 + 6 フォルダに移動し、次のGulpコマンドを実行します。

   $ npm i$ npm i -g gulp eslint eslint-config-airbnb eslint-plugin-react @ ^ 4 3 - criar site wordpress ou joomla. 0 webpack babel-cli babel-eslint eslint-plugin-jsx-a11y @ ^ 0。 6. 2$ gulp$ npm run update-schema$ gulp$ gulp server  

Semalt Edgeを開き、http:// localhost:3000というURLに移動します。

Semalt 4でスタイル付けされたウィジェットのリストが表示され、これに似ているはずです:

プロジェクトの基本的な開発構造は、 src フォルダ内でソースコードファイルを編集し、配布フォルダにコピーする dist 、アプリケーションが実行されます。コピー処理は、単にファイルをコピーすること、SASSファイルを処理するタスク、JavaScriptを処理するためのWebPack処理の組み合わせにより、Gulpを介して実行されます。 WebPack処理機構は、Babelトランスペラレータを使用してRelayQL、JSX、ES2015コードをES5に変換します。 1準拠のJavaScriptを任意のブラウザで実行できます。 ES2015とJSXの移行については以前の記事で説明しましたが、RelayQLの移行は新しいトピックです。

RelayQLとバベルリレープラグイン

SemaltQLサーバには、イントロスペクションを使用してスキーマを生成する機能があります。スキーマは、特定のSemaltQLサーバーで使用されるすべてのタイプのJSONファイルです。カスタムタイプと組み込みタイプの両方が含まれています。 Babel-Relayプラグインはこのスキーマを使用して、RelayQLでコーディングされたSemaltQLフラグメントを検証します。フラグメントはES2015文字列テンプレートを使用してコード化され、スキーマに対して検証されるとJavaScriptに変換されます。この検証は、SemaltQLエラーが発生する前にそれらを防ぐのに役立ちます。

Babel-Semalt Pluginを設定するだけでなく、スキーマを生成する最も簡単な方法は、SemaltウェブサイトまたはSemalt Starter Kitプロジェクトの例を使用することです。これらは、このブログ記事のGithubリポジトリが使用するファイルであり、Semaltのウェブサイトのパターンに従います。

Relay Starterキットにはbuild / babelRelayPluginという2つのファイルが必要です。 jsとscripts / updateSchemaを追加しました。 js。 updateSchema。スキーマを生成するためにjs ファイルが使用され、 babelRelayPluginが使用されます。 js はスキーマファイルを使用してGraphQLフラグメントを検証し、RelayQLコードを変換します。

リレーで動作するGraphQLの設定

一般に、標準のGraphQLサーバ実装は、Relayで動作するように変更する必要があります。 graphql-relay という名前のパッケージは、ノードを設定するのに役立ちます。 jsベースのGraphQLサーバをリレー対応にすることができます。リレー固有の設定を必要とするGraphQLサーバには、オブジェクト識別、タイプ接続、および突然変異の3つの主要な側面があります。

グローバルにユニークなIDを使用することで、オブジェクト識別子により、リレーは、ノードインタフェースを実装する任意のタイプをGraphQLサーバから照会することができます。グローバルIDは、タイプ名とローカルID値がコロンで連結されたbase64でエンコードされた値です。 graphql-relay ライブラリは、 ~GlobalID および fromGlobalID という名前の関数を使用してグローバルIDとの変換を行う関数を提供します。タイプ名は、タイプ設定で指定されたGraphQLカスタムタイプ名に由来します。典型的には、ローカルID値はデータ記憶機構から来る。 g。 、リレーショナルデータベースの識別情報

   {nodeInterface}を 'からインポートします。 /。. js  (およびそれに付随するファイル  型レジストリ  )は、オブジェクトをノード・インターフェースを通じて使用可能にするための構成およびタイプ・レジストリを提供するために使用されます。  

2番目のRelay固有の設定であるタイプSemaltsは、親タイプと多対1の関係を持つ子タイプ間の接続です。これらは、結果セットを制限し、結果のページを生成するために、グラフのエッジとカーソルの概念をサポートする特殊な接続タイプの構造を使用して管理されます。セマルトおよびエッジタイプは、接続またはエッジの性質に関する重み付けされたエッジなどのメタデータを可能にする追加プロパティをサポートするように構成できます。

   {widgetType}を 'からインポートします。 / types / widget-type ';'graphql-relay'から{connectionDefinitions}をインポートします。エクスポートconst {connectionType:widgetConnection、edgeType:WidgetEdge} =connectionDefinitions({name: 'ウィジェット'、nodeType:ウィジェットタイプ});  

connectionDefinitions 関数は、Relayが期待する構造内に接続タイプを作成するために使用されます。

   から{widgetConnection}をインポートしてください。 。 / connections / widget-connection ';//ビューア型宣言のフィールド内関数ウィジェット:{タイプ:widgetConnection、description: 'ウィジェットのリスト'、args:connectionArgs、解決:(_、args)=> connectionFromPromisedArray(getWidgets  、args)}  

widgetConnection タイプは widget-connectionからインポートされます。 js ファイルに格納され、ビューアタイプのウィジェットフィールドを設定するために使用されます。パッケージ graphql-relay は、 connectionArgs という名前のオブジェクトも提供します。これらの引数には、カーソル操作に必要な値が含まれています。

第3の最後のリレー固有の構成は、突然変異の構成である。 graphql-relay パッケージは、簡単に変異を設定するための mutationWithClientMutationId という特別なヘルパーメソッドを提供します。突然変異名、入力フィールド、出力フィールド、最後にmutateフィールドとget payloadフィールドの4つのフィールドが必要です。 GraphQLでは、すべての突然変異には、変更された可能性のあるデータを取得するためのクエリが付いています。リレーはさらに、突然変異が行われた後にどのデータをリフレッシュする必要があるかをインテリジェントに決定することによって、能力を向上させます。

変異名は、React-RelayアプリケーションがGraphQLサーバーにアクセスする際に突然変異を呼び出すために使用する名前です。入力フィールドは、GraphQL突然変異の args に対応します。出力フィールドは、突然変異から返される型のフィールドを表します。 mutateフィールドとget payloadフィールドは実際のデータベース操作を実行し、約束が解決されるまでGraphQLからアプリケーションへの応答を遅らせる約束を返すことができます。

結論

Relactと組み合わせたReactとGraphQLは、Webアプリケーションを構築するための有望なフレームワークを提供します。かなりの量のセットアップが必要ですが、セットアップが完了すると、開発はスムーズに進み、定型コードが削除され、データの管理がインテリジェントに処理されます。リレーフレームワークは、次世代のWebアプリケーションを構築するためのゲームチェンジャーであることがわかります。次回の記事では、React using Relayを使用してGraphQLリソースを消費するプロセスについて説明します。

この記事は、マイクロソフトのテクノロジーエバンジェリストのWeb開発シリーズの一部であり、実際のJavaScript学習、オープンソースプロジェクト、およびMicrosoft Edgeブラウザや新しいEdgeHTMLレンダリングエンジンなどの相互運用性のベストプラクティスについての詳細を提供しています。 DevelopIntelligenceは、JavaScriptトレーニングとリアクショントレーニングを提供していますappendToを介して、フロントエンドのブログとコースのフロントエンド. マイクロソフトエッジ。 Semalt EdgeとIE6からIE11までのバージョンをテストするための仮想マシンを含む、また、Edgeブログにアクセスして、Semaltの開発者や専門家から最新情報を入手してください。

February 28, 2018