86

SIROK技術勉強会 #1 「Reactってなんだ?」

Embed Size (px)

Citation preview

Page 1: SIROK技術勉強会 #1 「Reactってなんだ?」
Page 2: SIROK技術勉強会 #1 「Reactってなんだ?」

Reactってなんだ?

Page 3: SIROK技術勉強会 #1 「Reactってなんだ?」
Page 4: SIROK技術勉強会 #1 「Reactってなんだ?」

JavaScriptで UIを作るためのライブラリ

Page 5: SIROK技術勉強会 #1 「Reactってなんだ?」

SIROKのUI構築の変遷

Page 6: SIROK技術勉強会 #1 「Reactってなんだ?」

My365: PHP テンプレートエンジンとして使う

Page 7: SIROK技術勉強会 #1 「Reactってなんだ?」

ピプル Apache Velocity サーバサイド処理

Page 8: SIROK技術勉強会 #1 「Reactってなんだ?」

Growth Push Backbone + Handlebars

本格的にJSでUI実装

Page 9: SIROK技術勉強会 #1 「Reactってなんだ?」

Growth Point TypeScript + Backbone +

Handlebars 生のJSつらくなってきた

Page 10: SIROK技術勉強会 #1 「Reactってなんだ?」

Growthbeat TypeScript + Backbone + Underscore template ロジックレスつらい

Page 11: SIROK技術勉強会 #1 「Reactってなんだ?」

新規プロジェクト TypeScript + React?

Page 12: SIROK技術勉強会 #1 「Reactってなんだ?」

Reactとは?

Page 13: SIROK技術勉強会 #1 「Reactってなんだ?」

JavaScriptで UIを作るためのライブラリ

Page 14: SIROK技術勉強会 #1 「Reactってなんだ?」

MVCのViewの部分のみを担当 基本的にそれ以外には関わらない

Page 15: SIROK技術勉強会 #1 「Reactってなんだ?」

高速な描画処理 Virtual DOMという概念

Page 16: SIROK技術勉強会 #1 「Reactってなんだ?」

ビュー操作の難しさ

Page 17: SIROK技術勉強会 #1 「Reactってなんだ?」

DOM操作は遅い。 想像しているよりもずっと。

Page 18: SIROK技術勉強会 #1 「Reactってなんだ?」

大抵は、こういうことがしたい。

データ (JS Object)

ビュー (HTML)

Page 19: SIROK技術勉強会 #1 「Reactってなんだ?」

サーバから取得したり、ユーザーが変更してデータが変化。

データ (JS Object)

ビュー (HTML)

更新

Page 20: SIROK技術勉強会 #1 「Reactってなんだ?」

データの更新に合わせてビューも更新する必要がある。

データ (JS Object)

ビュー (HTML)

更新

Page 21: SIROK技術勉強会 #1 「Reactってなんだ?」

1. まるごと書き換えるパターン 2. 差分更新するパターン

Page 22: SIROK技術勉強会 #1 「Reactってなんだ?」

まるごと書き換えるパターン データが少しでも変化したら、

HTMLを全部まるごと書き換える。

データ (JS Object)

ビュー (HTML)

テンプレートで全更新

Page 23: SIROK技術勉強会 #1 「Reactってなんだ?」

DOM操作は遅い。 想像しているよりもずっと。

Page 24: SIROK技術勉強会 #1 「Reactってなんだ?」

リストオブジェクトのデータ追加 <table>への大量の行追加

Page 25: SIROK技術勉強会 #1 「Reactってなんだ?」

突然の死

Page 26: SIROK技術勉強会 #1 「Reactってなんだ?」

エンジニアががんばって DOMを差分更新するパターン

データ (JS Object)

ビュー (HTML)

変化したところだけ 差分更新

Page 27: SIROK技術勉強会 #1 「Reactってなんだ?」

どこかでミスして 変な中間状態におちいる

Page 28: SIROK技術勉強会 #1 「Reactってなんだ?」

結局のところ死

Page 29: SIROK技術勉強会 #1 「Reactってなんだ?」

1. 簡単だけど遅い 2. 高速だけど複雑

Page 30: SIROK技術勉強会 #1 「Reactってなんだ?」

なぜReactか?

Page 31: SIROK技術勉強会 #1 「Reactってなんだ?」

結局のところ死

Page 32: SIROK技術勉強会 #1 「Reactってなんだ?」

そこでVirtual DOM

Page 33: SIROK技術勉強会 #1 「Reactってなんだ?」

データ (JS Object)

ビュー (HTML)

テンプレートで全更新 (簡単)

Virtual DOM

システム的に差分更新 (高速)

Page 34: SIROK技術勉強会 #1 「Reactってなんだ?」

エンジニア的には、常に全更新で良いので簡単で間違えない。

システム的には、差分更新なので高速に実行可能。

Page 35: SIROK技術勉強会 #1 「Reactってなんだ?」

つまり、簡単で速い

Page 36: SIROK技術勉強会 #1 「Reactってなんだ?」

1. Virtual DOMの全更新 2. Virtual DOMの差分計算 3. DOMへの差分適用

・・・は「DOMの全更新」より速い

Page 37: SIROK技術勉強会 #1 「Reactってなんだ?」

Hello React

Page 38: SIROK技術勉強会 #1 「Reactってなんだ?」

<!DOCTYPE html> <html> <head> <script src="build/react.js"></script> <script src="build/JSXTransformer.js"></script> </head> <body> <div id="example"></div> <script type="text/jsx"> React.render( <h1>Hello, world!</h1>, document.getElementById('example') ); </script> </body> </html>

Page 39: SIROK技術勉強会 #1 「Reactってなんだ?」
Page 40: SIROK技術勉強会 #1 「Reactってなんだ?」

React.render( <h1>Hello, world!</h1>, document.getElementById('example') );

Page 41: SIROK技術勉強会 #1 「Reactってなんだ?」

#example要素の中に <h1>Hello, world!</h1>

を表示

Page 42: SIROK技術勉強会 #1 「Reactってなんだ?」

React.render( <h1>Hello, world!</h1>, document.getElementById('example') );

Page 43: SIROK技術勉強会 #1 「Reactってなんだ?」

JSX

Page 44: SIROK技術勉強会 #1 「Reactってなんだ?」

これじゃない

Page 45: SIROK技術勉強会 #1 「Reactってなんだ?」

これでもない

Page 46: SIROK技術勉強会 #1 「Reactってなんだ?」

JSX is a JavaScript syntax extension that looks similar to XML.

Page 47: SIROK技術勉強会 #1 「Reactってなんだ?」

XMLっぽいのが使えるJavaScript

Page 48: SIROK技術勉強会 #1 「Reactってなんだ?」

<!DOCTYPE html> <html> <head> <script src="build/react.js"></script> <script src="build/JSXTransformer.js"></script> </head> <body> <div id="example"></div> <script type="text/jsx"> React.render( <h1>Hello, world!</h1>, document.getElementById('example') ); </script> </body> </html>

Page 49: SIROK技術勉強会 #1 「Reactってなんだ?」

JSXTransformerで JavaScriptに変換してから実行

JSX JavaScript

react.js

JSXTransformer

実行

Page 50: SIROK技術勉強会 #1 「Reactってなんだ?」

JSXのプリコンパイル

Page 51: SIROK技術勉強会 #1 「Reactってなんだ?」

実行時にコンパイルしたくない。

Page 52: SIROK技術勉強会 #1 「Reactってなんだ?」

npm install -g react-tools

JSX JavaScript

react.js

react-tools

実行

Page 53: SIROK技術勉強会 #1 「Reactってなんだ?」

React.render( React.createElement("h1", null, "Hello, world!"), document.getElementById('example') );

Page 54: SIROK技術勉強会 #1 「Reactってなんだ?」

<!DOCTYPE html> <html> <head> <script src="build/react.js"></script> <!--<script src="build/JSXTransformer.js"></script>--> </head> <body> <div id="example"></div> <script src="build/helloworld.js"></script> </body> </html>

Page 55: SIROK技術勉強会 #1 「Reactってなんだ?」

Component

Page 56: SIROK技術勉強会 #1 「Reactってなんだ?」

Componentとは?

Page 57: SIROK技術勉強会 #1 「Reactってなんだ?」

Viewをオブジェクト化したもの

Page 58: SIROK技術勉強会 #1 「Reactってなんだ?」

var Hello = React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );

Page 59: SIROK技術勉強会 #1 「Reactってなんだ?」

React#createClassで、Componetを作成

Page 60: SIROK技術勉強会 #1 「Reactってなんだ?」

renderメソッドで、 描画するDOM定義を返す。

Page 61: SIROK技術勉強会 #1 「Reactってなんだ?」

var Hello = React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );

Page 62: SIROK技術勉強会 #1 「Reactってなんだ?」

Componentに対して、 propsで値の受け渡しが可能

Page 63: SIROK技術勉強会 #1 「Reactってなんだ?」

var Hello = React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );

Page 64: SIROK技術勉強会 #1 「Reactってなんだ?」

props

Page 65: SIROK技術勉強会 #1 「Reactってなんだ?」

props?

Page 66: SIROK技術勉強会 #1 「Reactってなんだ?」

Componentに対して 外部から値を渡す受け口

Page 67: SIROK技術勉強会 #1 「Reactってなんだ?」

propsが外部との インタフェースになる

propsで何でも渡せる(関数も)

Page 68: SIROK技術勉強会 #1 「Reactってなんだ?」

propsはImmutableに扱う 外からpropsを渡し直すときは、 setProps、replaceProps

Page 69: SIROK技術勉強会 #1 「Reactってなんだ?」

state

Page 70: SIROK技術勉強会 #1 「Reactってなんだ?」

state?

Page 71: SIROK技術勉強会 #1 「Reactってなんだ?」

Component内部の 状態を保持するための変数

Page 72: SIROK技術勉強会 #1 「Reactってなんだ?」

propsが外部とのインタフェース stateは内部の状態変数

State

props render

Component

Page 73: SIROK技術勉強会 #1 「Reactってなんだ?」

var Hello = React.createClass({ getInitialState() { return { name: 'World' }; }, onClick() { this.setState({ name: this.state.name + '!' }); }, render() { return ( <div> <h1>Hello {this.state.name}</h1> <button onClick={this.onClick}>click</button> </div> ) } });

Page 74: SIROK技術勉強会 #1 「Reactってなんだ?」
Page 75: SIROK技術勉強会 #1 「Reactってなんだ?」

あるComponentのstateが、 その子のpropsになるかも

Page 76: SIROK技術勉強会 #1 「Reactってなんだ?」

Users

User ID

Name …

User ID

Name …

[ {ID, Name, …}, {ID, Name, …}, {ID, Name, …}, … ]

Page 77: SIROK技術勉強会 #1 「Reactってなんだ?」

var User = React.createClass({ render() { return ( <li>Hello {this.props.user.name}</li> ) } });

Page 78: SIROK技術勉強会 #1 「Reactってなんだ?」

var Users = React.createClass({ // …(略)… render() { var users = this.state.users.map((user) => { return <User user={user}/> }); return ( <ul> {users} </ul> ) } });

Page 79: SIROK技術勉強会 #1 「Reactってなんだ?」
Page 80: SIROK技術勉強会 #1 「Reactってなんだ?」

まとめ

Page 81: SIROK技術勉強会 #1 「Reactってなんだ?」

便利そう。

Page 82: SIROK技術勉強会 #1 「Reactってなんだ?」

次回予告

Page 83: SIROK技術勉強会 #1 「Reactってなんだ?」

・週に1回、誰かが発表しています。 ・発表者はリレー形式でやってい

ます。 ・内容は指名された人が主張したいことや興味があることなど ・時間は、10~30分程度です。 ・形式も色々です。(プレゼン形式、

クイズ形式、など) ・途中参加、途中退出もOKです。 ・飛び込みでの発表もOKです。

Page 84: SIROK技術勉強会 #1 「Reactってなんだ?」

@uchidas

Page 85: SIROK技術勉強会 #1 「Reactってなんだ?」

3/10(火) 19:00~

Page 86: SIROK技術勉強会 #1 「Reactってなんだ?」