SlideShare a Scribd company logo
Missing Pages:
ReactJS/Flux/GraphQL/RelayJS
Khor, @neth_6, re:Culture
FBのドックで書いてない説明
アジェンダ
● ピユアなFluxの使い方
● GraphQL
○ RelayJSなし
○ NodeJSサーバーではないの GraphQLセットアップ
● RelayJS
○ ReactJS: カプリングを下げて, リユースを上げる
○ RelayJSとGraphQLのシナジー
○ NodeJSサーバーではないの RelayJS/GraphQLセットアップ
Reactのファミリー: 一言で ...
● ReactJS: UIデーターとレンダリング
● Flux: データーフロー とコードのストラクチャー
● GraphQL: シングルAPIエンドポイントデーターアクセス
● RelayJS: Reactコンポーネントのデーターdeclaration&コロケーション
GraphQL: RelayJSなし
GraphQL
GraphQL出来る
APIエンドポイント
シングルエンドポイントで全てのデーターを提供
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
categories: [
{
name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price: 20, stock: 50 },
{ name: ‘Baseball’, price: 5, stock: 30 },
…
],
...
}, …
],
}
GraphQL (cont.)
query {
store(email: "admin@abc.com") {
name,
address
}
}
APIエンドポイント
GraphQL (cont.)
query {
store(email: "admin@abc.com") {
name,
address
}
}
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
}
いらっしゃいませ
Hello Shop
住所: 1-3-1 Aoyama
オンラインショップ
APIエンドポイント
GraphQL (cont.)
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
store {
categories: [
{ name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price:, stock: 50 }, …
}, ...
]
}
Hello Shop
APIエンドポイント
GraphQL (cont.)
query {
store(email: "admin@abc.com") {
categories {
name,
products {
name, price, stock
}
}
}
}
store {
categories: [
{ name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price:, stock: 50 }, …
}, ...
]
}
シングル
エンドポイント
階層的な
データー
クライアント
コントロール
クエリー
1ラウンドトリッ
プ
データー
APIエンドポイント
GraphQL: セットアップ
GraphQL: クライアントサーバーモデル
ブラウザ
http(s)
サーバー
GraphQL: オーバーHTTP(S)
ブラウザ
GraphQL
サーバー
バンドル JS
GraphQL
オーバー
http(s)、など.
サーバー
GraphQLオーバーhttp(s)
GraphQLオーバーhttp
GraphQL: Enabling the Server
ブラウザ
GraphQL
サーバー
バンドル JS
サーバー
サーバー
ライブラリ
graphql
GraphQL
スキーマ
ハッシュ
GraphQL
オーバー
http(s)、など.
GraphQL: JS Code
ブラウザ
GraphQL
サーバー
バンドル JS
バンドル
JS
サーバー
サーバー
ライブラリ
graphql
GraphQL
スキーマ
ハッシュ
GraphQL
オーバー
http(s)、など.
GraphQL: Required JS Libraries
ブラウザ
バンドルJS
バンドル
JS
サーバー
JSライブラリ
react
react-dom
graphql
GraphQL
オーバー
http(s)、など.
GraphQL
サーバー
サーバー
ライブラリ
graphql
GraphQL
スキーマ
ハッシュ
GraphQL: Bundling Your JS Code
ブラウザ
バンドル JS
バンドル
JS
サーバー
JSライブラリ
react
react-dom
graphql
自分の
JS
GraphQL
オーバー
http(s)、など.
GraphQL
サーバー
サーバー
ライブラリ
graphql
browserify/w
ebpackGraphQL
スキーマ
ハッシュ
ReactJS (レビュー)
ReactJS
Courtesy: https://facebook.github.io/react/docs/thinking-in-react.html
Hello Shop
ReactJS (続き。。。)
Hello Shop
ReactJS (続き。。。)
Hello Shop
React (続き。。。)
Hello Shop
階層的なビュー => GraphQL 階層的なデーター
ReactJS (続き。。。)
アブストラックション
各ReactJSコンポーネントが理解なこと:
● 自分のデーター
● 自分のレンダリング
● チルドレンに一部分のデーターを渡す
React (続き。。。)
Fetch
Data
Hello Shop
React (続き。。。)
Hello Shop
React (続き。。。)
Hello Shop
チルドレンにデーターを渡す
this.props = {
store:
name: ‘Hello Shop’
categories: [
{
name: 'Sporting Goods',
items: [
{ name: 'Football', price: … }
…
],
},
...
],
},
}
データーとレンダリング
this.props.store.name
渡す
this.props.store.categories
そんなTight Coupling, High Reuse ではない
● 親はチルドレンの データーを知るのが必要
○ チルドレンのデーターをフェッチ
○ チルドレンの渡すのデーター部分を理解する
render() {
return (
<Store>{this.props.store} />
<Categories categories={this.props.store.categories} />
)
}
RelayJS: コンポーネント・データーコロケーション
カプリングを下げて、リユースを上げる
GraphQL
GraphQL出来る
シングルエンドポイントで全てのデーターを提供
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
categories: [
{
name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price: 20, stock: 50 },
{ name: ‘Baseball’, price: 5, stock: 30 },
…
],
...
}, …
],
}
APIエンドポイント
サンプルアップ
Hello Shop
サンプルアップ: 簡単化
Hello Shop
RelayJS:コンポーネント・データーコロケーション
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
categories: [
{
name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price: 20, stock: 50 },
{ name: ‘Baseball’, price: 5, stock: 30 },
…
],
...
}, …
],
}
fragment on Store {
name,
address
}
Hello Shop
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
categories: [
{
name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price: 20, stock: 50 },
{ name: ‘Baseball’, price: 5, stock: 30 },
…
],
...
}, …
],
}
fragment on Store {
categories {
name,
products,
}
}
RelayJS:コンポーネント・データーコロケーション
store(email: “admin@abc.com”) {
name: ‘Hello Shop’,
address: ‘1-3-1 Aoyama’
categories: [
{
name: ‘Sporting Goods’,
products: [
{ name: ‘Football’, price: 20, stock: 50 },
{ name: ‘Baseball’, price: 5, stock: 30 },
…
],
...
}, …
],
}
Hello Shop
RelayJSは
各コンポーネントのデー
ターをフェッチ
チルドレンにデーターを渡す
this.props = {
store:
name: ‘Hello Shop’
categories: [
{
name: 'Sporting Goods',
items: [
{ name: 'Football', price: … }
…
],
},
...
],
},
}
データーとレンダリング
this.props.store.name
渡す
this.props.store.categories
そんなTight Coupling, High Reuse ではない
● 親はチルドレンの データーを知るのが必要ない
○ チルドレンのデーターをフェッチ
○ チルドレンの渡すのデーター部分を理解する
render() {
return (
<Store>{this.props.store} />
<Categories categories={this.props.store.categories} />
)
}
RelayJS: GraphQLとのシナジー
なぜRelayJS?
● フィーチャー:
○ コンポーネント・データーコロケーション
○ Connection Id: データー再フィッチ
○ Connections: One-to-Many 関係・プージネション
○ Mutations: データー変更があったとき Reactコンポーネントを自動アップデート
● 暗黙なフィーチャー:
○ 自動データーフィッチ (AJAXコードなしで)
○ データーキャッシュとバッチフィッチ
● 面白いフィーチャー:
○ ロード中のスピナー
○ データーフェッチ失敗な実行なコード
○ オプチミスチックUIアップデート
RelayJS: セットアップ
RelayJS:コンポーネント・データーコロケーション
ブラウザ
GraphQL
/RelayJS
サーバー
バンドル JS
サーバー
JSライブラリ
react
react-dom
react-relay
babelify-relay-
plugin
babelify
RelayJS コンテナ
GraphQL
オーバー
http(s)、など
graphql
サーバーライ
ブラリ
graphql
自分の
JS と
Relay.QL
browserify/w
ebpack
GraphQL
スキーマ
JSON
バンドル
JS
GraphQL
スキーマ
ハッシュ
コンバーター
graphql-relay
参考
● 記事
○ GraphQL/RelayJS (non NodeJS): https://medium.com/@khor/relay-facebook-on-rails-8b4af2057152
○ Pure ‘Flux’ (non NodeJS): https://medium.com/@khor/back-to-front-rails-to-facebook-s-flux-ae815f81b16c
● スタータキット
○ Rails: https://github.com/nethsix/relay-on-rails
● チョイス: React, React (with Container), Flux/Redux, GraphQL/RelayJS
○ Shared by @koba04 - http://andrewhfarmer.com/react-ajax-best-practices/
● フォロー: @neth_6, @reculture_us
ありがとう:
● みんな!
● koba04!
● Facebookエンジニア!

More Related Content

PDF
Tokyo React.js #3: Missing Pages: ReactJS/Flux/GraphQL/RelayJS
PDF
RMSLE cost function
PDF
From Back to Front: Rails To React Family
PPTX
React meetup 3_eight
PDF
Gentlest Introduction to Tensorflow - Part 2
PDF
Gentlest Introduction to Tensorflow
PDF
Gentlest Introduction to Tensorflow - Part 3
PDF
Rails + Webpack
Tokyo React.js #3: Missing Pages: ReactJS/Flux/GraphQL/RelayJS
RMSLE cost function
From Back to Front: Rails To React Family
React meetup 3_eight
Gentlest Introduction to Tensorflow - Part 2
Gentlest Introduction to Tensorflow
Gentlest Introduction to Tensorflow - Part 3
Rails + Webpack

Viewers also liked (12)

PDF
Java + React.jsでSever Side Rendering #reactjs_meetup
PDF
Flowtype Introduction
PPTX
20160927 reactmeetup
PDF
Our wish to Flowtype
PDF
LSTM 네트워크 이해하기
PDF
Recurrent Neural Networks. Part 1: Theory
PDF
RNN, LSTM and Seq-2-Seq Models
PPTX
Understanding RNN and LSTM
PDF
Recurrent Neural Networks, LSTM and GRU
PDF
Why Companies Need New Approaches for Faster Time-to-Insight
PPTX
Discover the Power of Contextual Marketing
PDF
Hype vs. Reality: The AI Explainer
Java + React.jsでSever Side Rendering #reactjs_meetup
Flowtype Introduction
20160927 reactmeetup
Our wish to Flowtype
LSTM 네트워크 이해하기
Recurrent Neural Networks. Part 1: Theory
RNN, LSTM and Seq-2-Seq Models
Understanding RNN and LSTM
Recurrent Neural Networks, LSTM and GRU
Why Companies Need New Approaches for Faster Time-to-Insight
Discover the Power of Contextual Marketing
Hype vs. Reality: The AI Explainer
Ad

Similar to Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS (20)

PPTX
React native vol3
PDF
Redux, Relay, HorizonあるいはElm
PDF
GraphQL with React
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
PPTX
Develop Web Application with Node.js + Express
PDF
React+Redux+Node.js+Raspberry Piで ビデオプレイヤーを作りたかった話
PDF
マッチングアプリ『Omiai』の Flutter へのリプレイスの挑戦 (FlutterKaigi 2024)
PDF
React.js + Flux入門 #scripty02
PDF
Browser Computing Structure
PDF
GraphQLおよびそのエコシステム解説とチュートリアル紹介のためのプレゼンテーション資料
PDF
node.jsによる お手軽画像uploader実装
PDF
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
PDF
appengine ja night #24 Google Cloud Endpoints and BigQuery
PDF
Om Next ~React.jsを超えて
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PDF
GraphQL入門 (AWS AppSync)
PDF
AWS Expert Online appsyncを使ったServerlessアーキテクチャ
PDF
CloudSpiral 2014年度 Webアプリ講義(1日目)
PPTX
ぼくのNode.jsのだいいっぽ
PPT
第1回鹿児島node.jsの会資料_内村
React native vol3
Redux, Relay, HorizonあるいはElm
GraphQL with React
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Develop Web Application with Node.js + Express
React+Redux+Node.js+Raspberry Piで ビデオプレイヤーを作りたかった話
マッチングアプリ『Omiai』の Flutter へのリプレイスの挑戦 (FlutterKaigi 2024)
React.js + Flux入門 #scripty02
Browser Computing Structure
GraphQLおよびそのエコシステム解説とチュートリアル紹介のためのプレゼンテーション資料
node.jsによる お手軽画像uploader実装
20150207コデアルエンジニア学生向けハッカソン就活イベント発表資料
appengine ja night #24 Google Cloud Endpoints and BigQuery
Om Next ~React.jsを超えて
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
GraphQL入門 (AWS AppSync)
AWS Expert Online appsyncを使ったServerlessアーキテクチャ
CloudSpiral 2014年度 Webアプリ講義(1日目)
ぼくのNode.jsのだいいっぽ
第1回鹿児島node.jsの会資料_内村
Ad

Tokyo React.js #3 Meetup (ja): Missing Pages: ReactJS/GraphQL/RelayJS