react + flux

111
React + Flux @_yukikayuki NDS in Niigate #8 JavaScript Day!

Upload: yukikayuki

Post on 13-Apr-2017

328 views

Category:

Software


1 download

TRANSCRIPT

Page 1: React + Flux

React + Flux@_yukikayuki

NDS in Niigate #8 JavaScript Day!

Page 2: React + Flux

• @_yukikayuki / Kaneda Takayuki

• ウォーターセル株式会社

• フロントエンドエンジニア

Page 3: React + Flux

皆さんフレームワーク何使ってますか?

Page 4: React + Flux

jQuery

Page 5: React + Flux

今でも現役

Page 6: React + Flux

ホームページなら任せろ

Page 7: React + Flux

シングルページアプリケーションは?

Page 8: React + Flux

限りなくつらい

Page 9: React + Flux

Backbone

Page 10: React + Flux

バラバラの骨

Page 11: React + Flux

高度な設計スキルと経験が無いと難しい

Page 12: React + Flux

DOMとstateが混ざる

Page 13: React + Flux

イベント地獄 class属性地獄

Page 14: React + Flux

Marionette必須

Page 15: React + Flux

AngularAngular

Page 16: React + Flux

フルスタック 双方向バインディング

Page 17: React + Flux

当時はすげーと言いながらコーディングしていた

Page 18: React + Flux

コンポーネントがstateを持つのでつらい

Page 19: React + Flux

複雑になるとつらい

Page 20: React + Flux

皆の課題はstate管理

Page 21: React + Flux

大体DOMとstateが混ざって爆発する

Page 22: React + Flux

http://www.infoq.com/jp/news/2014/05/facebook-mvc-flux

Page 23: React + Flux

まだstate管理で消耗してるの?

Page 24: React + Flux

そんな人におすすめなのが React + Flux

Page 25: React + Flux

React

Page 26: React + Flux

Facebook謹製のUIライブラリ

Page 27: React + Flux

特徴

• JUST THE UI

• VIRTUAL DOM

• DATA FLOW

Page 28: React + Flux

JUST THE UI

Page 29: React + Flux

• Componentを作るためのUIライブラリ

• MVCのV

• V以外の場所は何を使ってもいい

Page 30: React + Flux

VIRTUAL DOM

Page 31: React + Flux

<ul> <li>React</li> <li>Backbone</li> </ul>

<ul> <li>React</li> <li>Marionette</li> </ul>

Page 32: React + Flux

差分

Page 33: React + Flux

<ul> <li>React</li> <li>Backbone</li> </ul>

<ul> <li>React</li> <li>Marionette</li> </ul>

Page 34: React + Flux

こんな時どんなアプローチをするか

Page 35: React + Flux

頑張って差分のみ書き換える

Page 36: React + Flux

シンプルに<ul>を毎回描画するコードを書きたい

Page 37: React + Flux

むしろ全部再描画したい

Page 38: React + Flux

初回描画された瞬間が一番きれい

Page 39: React + Flux

               , -――- 、               /       ヽ               | ノ  ー    |   それってだめじゃね?               |(・) (・) |   だってDOMすべて再描画って遅いじゃん               |  (     |               ヽ O    人                >ー-― ́  ‾‾\   ⊂ニニ‾‾‾ヽ  /              |      くメ) _ノ  |  |  |        |   |        (/  |  | /  |        |   |           |  |/  /|        |   |           |  ト  / |        |   |           ヽ__/ |        |   |

Page 40: React + Flux

       _,,;' '" '' ゛''" ゛' ';;,,       (rヽ,;''"""''゛゛゛'';, ノr)       ,;'゛ i _  、_ iヽ゛';,    お前それVirtual DOMの前でも同じ事言えんの?       ,;'" ''| ヽ・〉 〈・ノ |゙゛ `';,       ,;'' "|   ▼   |゙゛ `';,       ,;''  ヽ_人_ /  ,;'_      /シ、  ヽ⌒⌒ /   リ \     |   "r,, `"'''゙́  ,,ミ゛   |     |      リ、    ,リ    |     |   i   ゛r、ノ,,r" i   _|     |   `ー――----┴ ⌒́ )     (ヽ  ______ ,, _́)      (_⌒ ______ ,, ィ       丁           |        |           |

Page 41: React + Flux

差分だけ変更する

- Backbone + Marionette

Page 42: React + Flux

これをやってくれる

Page 43: React + Flux

何がすごい

Page 44: React + Flux

毎回新しいDOMをプッシュし続けられる

Page 45: React + Flux

• △ 差分のみ更新で速い・すごい

• ◯ 雑にダイナミックに書ける

Page 46: React + Flux

DATA FLOW

Page 47: React + Flux

親から子へ一方通行

Page 48: React + Flux

親のみステートフル this.state

Page 49: React + Flux

子はステートレス this.props

Page 50: React + Flux

https://html5experts.jp/hokaccha/13301/

Page 51: React + Flux

その他に

• JSX

• ビルド

• リアルDOM

Page 52: React + Flux

JSX

Page 53: React + Flux

_人人人人人人人人_ > JSの中にHTML < ‾Y^Y^Y^Y^Y^Y^Y‾

Page 54: React + Flux

JavaScript XML

Page 55: React + Flux

import React from ‘react’; import ReactDom from ‘react-dom’; class Hello extends React.Component { render() { return (

<div> hello world </div>

); } } ReactDom.render( <Hello/>, document.getElemetById(‘root’) );

Page 56: React + Flux

class Hello extends React.Component { render() { return (

<div> hello world </div>

); } }

これ

Page 57: React + Flux

そのままだと実行できない

Page 58: React + Flux

変換が必要

Page 59: React + Flux

class Hello extends React.Component { render() { return React.createElement( "div", null, "hello world" ); } }

Page 60: React + Flux

ただのメソッド呼び出しになった

Page 61: React + Flux

createElementだけで頑張ることもできる

Page 62: React + Flux

ビルド

Page 63: React + Flux

Babel

Page 64: React + Flux

ES6をES5へ変換するやつ JSXもサポート

Page 65: React + Flux

webpack

Page 66: React + Flux

静的ファイルを結合する奴

Page 67: React + Flux

リアルDOM

Page 68: React + Flux

まだDOM触ってるんですか?

Page 69: React + Flux

そりゃ触りますよ

Page 70: React + Flux

Read onlyで触るのが良い

Page 71: React + Flux

return( <input type=“text” ref=“name”/> )

Page 72: React + Flux

ReactDom.findDOMNode(this.refs.name);

Page 73: React + Flux

Reactまとめ

• とても賢い

• 雑に使っても実用には問題ないくらい速い

• ステートレスな関数的使い方ができる

• Viewライブラリ

Page 74: React + Flux

Flux

Page 75: React + Flux

アーキテクチャ

Page 76: React + Flux

オブザーバーパターンに名前をつけた

Page 77: React + Flux

公式はリファレンスと少しの実装

Page 78: React + Flux

様々なFlux実装• Fluxxor

• Flumox

• Reflux

• RxFlux

• その他多数

Page 79: React + Flux

どれを使えば良いんだorz

Page 80: React + Flux

Redux

Page 81: React + Flux

メジャーリリースv4.0で終わりだ。代わりにReduxを使ってくれ。奴はやばい(いい意味で)

https://github.com/acdlite/flummox

Page 82: React + Flux

React + Redux

Page 83: React + Flux

https://facebook.github.io/flux/docs/overview.html#content

Page 84: React + Flux

https://github.com/facebook/flux/tree/master/examples/flux-todomvc/

Page 85: React + Flux

一方通行

Page 86: React + Flux

Views

Page 87: React + Flux

Reactが担当

Page 88: React + Flux

ユーザのイベントに応じてActionを発行する

Page 89: React + Flux

class Hello extends React.Component { render() { const {userActions} = this.props; return (

<div onClick={userActions.hello}> hello world </div>

); } }

これ

Page 90: React + Flux

ここでAPIとの通信を行ったりする

Page 91: React + Flux

Action

Page 92: React + Flux

アプリケーションで何が起きたのかとそれに付随するデータ

Page 93: React + Flux

export const HELLO = 'HELLO';export function hello() { return { type: HELLO };}

これ

Page 94: React + Flux

Dispatcher

Page 95: React + Flux

ActionをすべてのStoreへ配送する

Page 96: React + Flux

フレームワークによって大体隠蔽されるのであまり意識し

ない

Page 97: React + Flux

Store

Page 98: React + Flux

アプリケーションのすべてのデータを保有する

例外あり

Page 99: React + Flux

export default function hello(state = ‘’, action) { switch (action.type) { case HELLO: return 'hello'; default: return state; }}

これ

Page 100: React + Flux

Storeを変更するにはActionを発行するしか無い

Page 101: React + Flux

Actionを受け取り、自分と関係ある場合のみ更新

Page 102: React + Flux

Views

Page 103: React + Flux

stateを受け取り、レンダリング

Page 104: React + Flux

1周おわり

Page 105: React + Flux

Viewは自分を更新したい場合、Actionを投げて結果が帰ってくるのをじっと待つ

Page 106: React + Flux

Fluxまとめ

• 一方通行なので動作が推測しやすい

• 各パーツが独立するのでテストしやすい

Page 107: React + Flux

最後に

Page 108: React + Flux

導入するメリット

• 複雑な状態を管理しやすくなる

• テストしやすい

Page 109: React + Flux

まずはReact日本語チュートリアルから

Page 110: React + Flux

おわり

Page 111: React + Flux

今日覚えて帰るキーワード

• React

• Flux

• Redux

• ES6(ES2015)

• ウォーターセル

• 求人あります

• Babel

• webpack