211 Views
December 18, 14
スライド概要
2014/12/15の勉強会にて発表された資料です。
SCRIPTY#2 ~フロントエンド紳士・淑女のための勉強会~
http://scripty.connpass.com/event/10345/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
React.js + Flux 入門 リッチラボ株式会社 穴井宏幸 @pirosikick 2014/12/18(Mon) SCRIPTY#2
穴井 宏幸 リッチラボ株式会社 エンジニア @pirosikick (ぴろしきっく) ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
• 普段はスマフォのリッチ広告 を作ったりしています。 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
JavaScript 好きです
よろしく お願い致します
• Facebook製の • UI構築のためのライブラリ ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
http://facebook.github.io/react/ ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
• JUST THE UI • VIRTUAL • DATA DOM FLOW ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
JUST THE UI
• View専門のライブラリ • ルーティングやAPIリクエスト など、 • SPAを作るのに必須な機能は、 • 含まれていない ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Hello! World ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Hello! World !?!? ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
JSX • JSX →(コンパイル)→ JavaScript • JSの中でタグを書く • コンパイル方法 1. JSXTransformer.js 2. react-tools ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
JSXTransformer.js ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
react-tools # react-toolsをインストール $ npm i -g react-tools ! # jsx/にあるJSXを # コンパイルしてjs/に出力 $ jsx jsx/ js/ ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
• Browserify • webpack → reactify → jsx-loader ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Virtual DOM
Virtual DOM ⇓ 仮想DOM
なぜ仮想DOMという概念が俺達の魂を震えさせるのか http://qiita.com/mizchi/items/4d25bc26def1719d52e6 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
• 仮想のツリーを持つ • そこで差分を計算して、 • 本物のDOMに反映する • 高速、処理がシンプルに ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
従来 Model 初期データ 追加 変更 削除 View 初期レンダー 追加 変更 DOM ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 削除
従来 Model 初期データ 追加 変更 削除 View それぞれ処理が必要 初期レンダー 追加 変更 DOM ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 削除
Store VDOM 最新の状態を参照 変更を通知 View レンダー Virtual DOM 古 ←比較→ 新 差分 差分を反映 DOM ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Store VDOM 最新の状態を参照 変更を通知 View レンダー シンプル!!!! Virtual DOM 古 ←比較→ 新 差分 差分を反映 DOM ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Store VDOM 最新の状態を参照 変更を通知 DOM操作は View 賢くやってくれる レンダー Virtual DOM 古 ←比較→ 新 差分 差分を反映 DOM ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
DATA FLOW
親 子 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
親 子 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
親 属性経由でデータを渡す 子 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
• this.props • 親→子の一方通行 • 理解しやすい ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
その他 よく使う機能
propsのValidation ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
propsのValidation ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
propsのValidation ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
this.state ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
this.state stateが更新されると再レンダーされる ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
イベント ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
イベント • Eventはラップされてる • ブラウザ差異は気にしなくてよい • stopPropergation, preventDefault も実行可能 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
ライフサイクル メソッド http://facebook.github.io/react/docs/component-specs.html ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Mount イベントのadd, removeに よく使われる ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
shouldComponentUpdate 再レンダーのタイミングを制御できる ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Flux • Facebookが提唱しているアーキテクチャ • 特定のフレームワークの名前ではない • • 「MVC」と同じレイヤーの話 View, Store, Dispatcher • ViewはReact.js ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
https://github.com/facebook/flux ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Web API User Interaction Views Action Creater() Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction ①クリックとか Views Action Creater() Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction Views ②ActionCreater 実行 Change Event Action Creater() Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction Action Creater() Views ③Actionを発行 Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction Views Action Creater() Change Event Action ④Storeの Callbackを実行 Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 dispatch() Dispatcher
Web API User Interaction Action Creater() Views ⑤内部の状態を 変更 Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction Views Action Creater() Change Event Action ⑥変更を通知 dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction ⑦View更新 Views Action Creater() Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
Web API User Interaction データの流れが 一方通行 Views Action Creater() Change Event Action dispatch() Store Callback() ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止 Dispatcher
例)Todoリスト ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
<Application /> <TodoItem/> <TodoItem/> <TodoItem/> <TodoItem/> ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
フレームワーク • 今回は「Fluxxor」を使う • http://fluxxor.com/ • シンプルで小さいので理解しやすい ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Dispatcher作成 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Action Creatorたち dispatcher.dispatch() を実行 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
TodoStore作成 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
TodoStore作成 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
TodoStore作成 ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
<Application /> ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
<Application /> ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
<Application /> ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
<Application /> ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
まとめ
シンプルでよい
Don't React http://staltz.com/dont-react/ ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
他の仮想DOM系も 追っていきたい • https://github.com/Matt-Esch/ virtual-dom • https://github.com/segmentio/deku ©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止
Thank you:) @pirosikick (ぴろしきっく)