Submit Search
SIROK技術勉強会 #1 「Reactってなんだ?」
•
20 likes
•
65,798 views
Naoyuki Kataoka
Follow
SIROK技術勉強会 #1 「Reactってなんだ?」
Read less
Read more
1 of 86
Download now
Downloaded 41 times
More Related Content
SIROK技術勉強会 #1 「Reactってなんだ?」
2.
Reactってなんだ?
4.
JavaScriptで UIを作るためのライブラリ
5.
SIROKのUI構築の変遷
6.
My365: PHP テンプレートエンジンとして使う
7.
ピプル Apache Velocity サーバサイド処理
8.
Growth Push Backbone +
Handlebars 本格的にJSでUI実装
9.
Growth Point TypeScript +
Backbone + Handlebars 生のJSつらくなってきた
10.
Growthbeat TypeScript + Backbone
+ Underscore template ロジックレスつらい
11.
新規プロジェクト TypeScript + React?
12.
Reactとは?
13.
JavaScriptで UIを作るためのライブラリ
14.
MVCのViewの部分のみを担当 基本的にそれ以外には関わらない
15.
高速な描画処理 Virtual DOMという概念
16.
ビュー操作の難しさ
17.
DOM操作は遅い。 想像しているよりもずっと。
18.
大抵は、こういうことがしたい。 データ (JS Object) ビュー (HTML)
19.
サーバから取得したり、ユーザー が変更してデータが変化。 データ (JS Object) ビュー (HTML) 更新
20.
データの更新に合わせてビューも 更新する必要がある。 データ (JS Object) ビュー (HTML) 更新
21.
1. まるごと書き換えるパターン 2. 差分更新するパターン
22.
まるごと書き換えるパターン データが少しでも変化したら、 HTMLを全部まるごと書き換える。 データ (JS Object) ビュー (HTML) テンプレートで全更新
23.
DOM操作は遅い。 想像しているよりもずっと。
24.
リストオブジェクトのデータ追加 <table>への大量の行追加
25.
突然の死
26.
エンジニアががんばって DOMを差分更新するパターン データ (JS Object) ビュー (HTML) 変化したところだけ 差分更新
27.
どこかでミスして 変な中間状態におちいる
28.
結局のところ死
29.
1. 簡単だけど遅い 2. 高速だけど複雑
30.
なぜReactか?
31.
結局のところ死
32.
そこでVirtual DOM
33.
データ (JS Object) ビュー (HTML) テンプレートで全更新 (簡単) Virtual DOM システム的に差分更新 (高速)
34.
エンジニア的には、常に全更新で 良いので簡単で間違えない。 システム的には、差分更新なので 高速に実行可能。
35.
つまり、簡単で速い
36.
1. Virtual DOMの全更新 2.
Virtual DOMの差分計算 3. DOMへの差分適用 ・・・は「DOMの全更新」より速い
37.
Hello React
38.
<!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>
40.
React.render( <h1>Hello, world!</h1>, document.getElementById('example') );
41.
#example要素の中に <h1>Hello, world!</h1> を表示
42.
React.render( <h1>Hello, world!</h1>, document.getElementById('example') );
43.
JSX
44.
これじゃない
45.
これでもない
46.
JSX is a
JavaScript syntax extension that looks similar to XML.
47.
XMLっぽいのが使える JavaScript
48.
<!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>
49.
JSXTransformerで JavaScriptに変換してから実行 JSX JavaScript react.js JSXTransformer 実行
50.
JSXのプリコンパイル
51.
実行時にコンパイルしたくない。
52.
npm install -g
react-tools JSX JavaScript react.js react-tools 実行
53.
React.render( React.createElement("h1", null, "Hello, world!"), document.getElementById('example') );
54.
<!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>
55.
Component
56.
Componentとは?
57.
Viewをオブジェクト化したもの
58.
var Hello =
React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );
59.
React#createClassで、 Componetを作成
60.
renderメソッドで、 描画するDOM定義を返す。
61.
var Hello =
React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );
62.
Componentに対して、 propsで値の受け渡しが可能
63.
var Hello =
React.createClass({ render() { return ( <div>Hello {this.props.name}</div> ) } }); React.render( <Hello name="World" />, document.getElementById('example') );
64.
props
65.
props?
66.
Componentに対して 外部から値を渡す受け口
67.
propsが外部との インタフェースになる propsで何でも渡せる(関数も)
68.
propsはImmutableに扱う 外からpropsを渡し直すときは、 setProps、replaceProps
69.
state
70.
state?
71.
Component内部の 状態を保持するための変数
72.
propsが外部とのインタフェース stateは内部の状態変数 State props render Component
73.
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> ) } });
75.
あるComponentのstateが、 その子のpropsになるかも
76.
Users User ID Name … User ID Name … … [ {ID, Name, …}, {ID,
Name, …}, {ID, Name, …}, … ]
77.
var User =
React.createClass({ render() { return ( <li>Hello {this.props.user.name}</li> ) } });
78.
var Users =
React.createClass({ // …(略)… render() { var users = this.state.users.map((user) => { return <User user={user}/> }); return ( <ul> {users} </ul> ) } });
80.
まとめ
81.
便利そう。
82.
次回予告
83.
・週に1回、誰かが発表しています。 ・発表者はリレー形式でやってい ます。 ・内容は指名された人が主張した いことや興味があることなど ・時間は、10∼30分程度です。 ・形式も色々です。(プレゼン形式、 クイズ形式、など) ・途中参加、途中退出もOKです。 ・飛び込みでの発表もOKです。
84.
@uchidas
85.
3/10(火) 19:00∼
Download