71
React.js + Flux 入門 リッチラボ株式会社 穴井宏幸 @pirosikick 2014/12/18(Mon) SCRIPTY#2

React.js + Flux入門 #scripty02

  • Upload
    yahoo

  • View
    3.294

  • Download
    1

Embed Size (px)

Citation preview

Page 1: React.js + Flux入門 #scripty02

React.js + Flux 入門

リッチラボ株式会社 穴井宏幸 @pirosikick

2014/12/18(Mon) SCRIPTY#2

Page 2: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

穴井 宏幸 リッチラボ株式会社 エンジニア

@pirosikick(ぴろしきっく)

Page 3: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• 普段はスマフォのリッチ広告を作ったりしています。

Page 4: React.js + Flux入門 #scripty02

JavaScript 好きです

Page 5: React.js + Flux入門 #scripty02

よろしく お願い致します

Page 6: React.js + Flux入門 #scripty02
Page 7: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• Facebook製の

• UI構築のためのライブラリ

Page 8: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

http://facebook.github.io/react/

Page 9: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• JUST THE UI

• VIRTUAL DOM

• DATA FLOW

Page 10: React.js + Flux入門 #scripty02

JUST THE UI

Page 11: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• View専門のライブラリ

•ルーティングやAPIリクエストなど、

• SPAを作るのに必須な機能は、

•含まれていない

Page 12: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Hello! World

Page 13: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Hello! World

!?!?

Page 14: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

JSX

• JSX →(コンパイル)→ JavaScript

• JSの中でタグを書く

• コンパイル方法

1. JSXTransformer.js

2. react-tools

Page 15: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

JSXTransformer.js

Page 16: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

react-tools

# react-toolsをインストール $ npm i -g react-tools !

# jsx/にあるJSXを # コンパイルしてjs/に出力 $ jsx jsx/ js/

Page 17: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• Browserify → reactify

• webpack → jsx-loader

Page 18: React.js + Flux入門 #scripty02

Virtual DOM

Page 19: React.js + Flux入門 #scripty02

Virtual DOM ⇓

仮想DOM

Page 20: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

なぜ仮想DOMという概念が俺達の魂を震えさせるのか http://qiita.com/mizchi/items/4d25bc26def1719d52e6

Page 21: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• 仮想のツリーを持つ

•そこで差分を計算して、

•本物のDOMに反映する

•高速、処理がシンプルに

Page 22: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Model

View

DOM

初期データ 追加 削除変更

初期レンダー 追加 削除変更

従来

Page 23: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

View

Model

DOM

初期データ 追加 削除変更

初期レンダー 追加 削除変更

それぞれ処理が必要

従来

Page 24: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Store

View

DOM

最新の状態を参照

Virtual DOM

変更を通知

レンダー

古 新 差分

差分を反映

←比較→

VDOM

Page 25: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Store

View

DOM

Virtual DOM

変更を通知

レンダー

古 新 差分

差分を反映

←比較→シンプル!!!!

VDOM

最新の状態を参照

Page 26: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Store

View

DOM

最新の状態を参照

Virtual DOM

変更を通知

レンダー

古 新 差分

差分を反映

←比較→

DOM操作は 賢くやってくれる

VDOM

Page 27: React.js + Flux入門 #scripty02

DATA FLOW

Page 28: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Page 29: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Page 30: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

属性経由でデータを渡す

Page 31: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

• this.props

•親→子の一方通行

•理解しやすい

Page 32: React.js + Flux入門 #scripty02

その他 よく使う機能

Page 33: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

propsのValidation

Page 34: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

propsのValidation

Page 35: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

propsのValidation

Page 36: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

this.state

Page 37: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

this.state

stateが更新されると再レンダーされる

Page 38: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

イベント

Page 39: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

イベント

• Eventはラップされてる

• ブラウザ差異は気にしなくてよい

• stopPropergation, preventDefaultも実行可能

Page 40: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

ライフサイクルメソッド

http://facebook.github.io/react/docs/component-specs.html

Page 41: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Mount

イベントのadd, removeに よく使われる

Page 42: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

shouldComponentUpdate

再レンダーのタイミングを制御できる

Page 43: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Page 44: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Flux

• Facebookが提唱しているアーキテクチャ

• 特定のフレームワークの名前ではない

• 「MVC」と同じレイヤーの話

• View, Store, Dispatcher

• ViewはReact.js

Page 45: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

https://github.com/facebook/flux

Page 46: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

ActionChange Event

User Interaction

Page 47: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store

①クリックとか

Callback()

Action Creater()

Web API

dispatch()

ActionChange Event

User Interaction

Page 48: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store

②ActionCreater 実行

Callback()

Action Creater()

Web API

dispatch()

ActionChange Event

User Interaction

Page 49: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

Action

③Actionを発行

Change Event

User Interaction

Page 50: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

④Storeの Callbackを実行

Action Creater()

Web API

dispatch()

ActionChange Event

User Interaction

Page 51: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

ActionChange Event

⑤内部の状態を 変更

User Interaction

Page 52: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

Action⑥変更を通知Change Event

User Interaction

Page 53: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

Action

⑦View更新

User Interaction

Change Event

Page 54: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher

Views

Store Callback()

Action Creater()

Web API

dispatch()

ActionChange Event

User Interaction

データの流れが 一方通行

Page 55: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

例)Todoリスト

Page 56: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

<Application /><TodoItem/><TodoItem/><TodoItem/><TodoItem/>

Page 57: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

フレームワーク

• 今回は「Fluxxor」を使う

• http://fluxxor.com/

• シンプルで小さいので理解しやすい

Page 58: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Dispatcher作成

Page 59: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Action Creatorたち

dispatcher.dispatch() を実行

Page 60: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

TodoStore作成

Page 61: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

TodoStore作成

Page 62: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

TodoStore作成

Page 63: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

<Application />

Page 64: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

<Application />

Page 65: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

<Application />

Page 66: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

<Application />

Page 67: React.js + Flux入門 #scripty02

まとめ

Page 68: React.js + Flux入門 #scripty02

シンプルでよい

Page 69: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

Don't React http://staltz.com/dont-react/

Page 70: React.js + Flux入門 #scripty02

©2014 Rich Lab Co., Ltd. All Rights Reserved. 無断利用・転載禁止

他の仮想DOM系も 追っていきたい

• https://github.com/Matt-Esch/virtual-dom

• https://github.com/segmentio/deku

Page 71: React.js + Flux入門 #scripty02

Thank you:)

@pirosikick(ぴろしきっく)