SlideShare a Scribd company logo
Shumpei Hozumi
穂積 俊平
しくみ製作所 福島支部
“React.js” と戯れてみた
1. React.js とは?
2. 競合
3. 競合の問題点
4. 3つの特徴
5. 記述方法
6. 使ってみた感想
7. 参考サイト
2
目次
Shumpei Hozumi
1. Facebook が開発している JavaScript ライブラリ
MVC の V(View) を開発するためのライブラリ
2. 導入実績
1. Facebook
2. Instagram
3. Yahoo
4. AirBnB
3
React.js とは?
Shumpei Hozumi
1. 特徴
1. フルスタックな MVW (Whatever) フレームワーク
2. 双方向データバインディング(dirty checking 方式)
3. テンプレートとしてのHTML
2. 本家サンプル
https://angularjs.org/
4
競合(AngularJS)
Shumpei Hozumi
1. フルスタックゆえに学習コスト高い
勉強すべき概念が多い
2. 大規模な場合、再描画速度が問題になることが多い
dirty checking は、バインドしている全ての変数について、特定
のタイミングで値の変更がないか確認を行うため、変数が増え
るにつれ遅くなる
3. 双方向バインディングでは処理の流れが追いにくい
内部の処理が完全に隠蔽化されているので、デバッグが難しい
5
AngularJS の問題点
Shumpei Hozumi
1. View に特化(Model もちょっとサポート)
学習コストが低いのでとっつきやすい
2. 仮想 DOM という概念を導入
仮想DOMの比較により、再描画の範囲を最小限にし、高速化
3. 一方向のデータフロー
常に一方向に流れるので処理が追いやすい
6
React.js の3つの特徴
Shumpei Hozumi
1. HTMLインスタンスと1対1で対応する単純な構造体
2. 再描画範囲の特定のために用いられる
1. 状態変更前後の仮想DOMの差分を計算
2. 差分を元にDOMの変更パッチを作成
3. HTMLインスタンスにパッチを反映
7
仮想DOM
Shumpei Hozumi
State A:<div class=‘hoge’>AAA</div>
State B:<div class=‘hoge’>BBB</div>
作られる差分:hoge の text に -AAA+BBB
変更パッチ:node.querySelector(‘.hoge’).innerHTML =‘BBB’
大雑把な例
1. Model から View へのデータフローのみ提供
1. 処理を明示的に書く必要がある
明示的に書かれているので混乱しにくい
明示的に書く必要があるのでやや冗長に感じる
8
一方向のデータフロー
Shumpei Hozumi
Model View
1. Flux というアーキテクチャで構成すると良い
1. Facebook が提唱しているデータフローアーキテクチャ
2. Flux を構成する基礎的な機能を React.js が提供
1. 正直ほとんど提供されていない…
9
一方向のデータフロー
Shumpei Hozumi
Action Dispatcher Store View
Action
1. JSX という独自文法を備える
1. HTML をそのまま js ファイル中に書ける
2. 拡張子に .jsx を付け、コンパイルする必要あり
3. CoffeeScript で書く場合はバッククォートで囲む必要あり
10
記述方法(JSX)
Shumpei Hozumi
CalendarHeaderTitle = React.createClass
render: ->
`<h2> カレンダー</h2>`
CalendarHeaderBtn = React.createClass
render: ->
`<p className="schedules-btn">
<a className="button-white" href="#">
予定を追加する
</a>
</p>`
記述例 : calendar.js.jsx.coffee
1. JSX という独自文法を備える
1. 階層化が直感的に書ける
2. class は className と書く必要あり。js の予約語のため。
11
記述方法(JSX)
Shumpei Hozumi
CalendarHeader = React.createClass
render: ->
`<div className="schedules-heading">
<CalendarHeaderTitle />
<CalendarHeaderBtn />
</div>`
階層化の記述例
1. JSX という独自文法を備える
1. 繰り返しをサポートする文法がある
2. でも、繰り返しの記述は辛い…
12
記述方法(JSX)
Shumpei Hozumi
CalendarContentWeek = React.createClass
render: ->
days = []
_.each this.props.week, (day)->
days.push `<CalendarContentDay day={day}/>`
`<tr>{days}</tr>`
繰り返しの記述例
1. props と state で管理
1. props は親コンポーネントから渡される状態
2. state はコンポーネント自身が保持する状態
13
状態管理
Shumpei Hozumi
CalendarContentWeek = React.createClass
render: ->
days = []
_.each this.props.week, (day)->
days.push `<CalendarContentDay day={day}/>`
`<tr>{days}</tr>`
CalendarContentDay = React.createClass
render: ->
`<td>
<div>{this.props.day.date}</div>
</td>`
props の利用例
1. props と state で管理
1. props は親コンポーネントから渡される状態
2. state はコンポーネント自身が保持する状態
14
状態管理
Shumpei Hozumi
CalendarContentDay = React.createClass
getInitialState: ->
{ clicked:false }
render: ->
clazz = “”
if this.state.clicked
clazz = “active”
`<td className={clazz}>
<div>{this.props.day.date}</div>
</td>`
state の利用例
1. props と state で管理する際の注意点
1. なるべく props を活用するようにする(状態数を少なくする)
2. state はなるべく下層に持たせる(stateが影響する範囲を小さく)
15
状態管理の注意点
Shumpei Hozumi
1. onClick などの属性を利用して書く必要がある
ピュアな HTML + JavaScript と変わらない…
2. setState を使って状態を更新することで状態変化が伝播する
16
状態の変化の伝播
Shumpei Hozumi
CalendarContentDay = React.createClass
makeActive: ->
this.setState({clicked:true})
render: ->
clazz = “”
if this.state.clicked
clazz = “active”
`<td className={clazz} onClick=“this.makeActive”>
<div>{this.props.day.date}</div>
</td>`
記述例
1. 利点
1. 再描画が高速らしい… 重い処理させてないから実感はない
2. データフローを明確に書くのでデバッグしやすい
3. 学習コストが低く、とっつきやすい。
2. 欠点
1. 全体的に書き心地がよくない
JSX が使いにくい
View に関するコードが散在する
→ react-jade に期待。本家 jade が製造。
2. 機能的に色々足りていない気がする
→ Flux フレームワークが色々出てきてる。
Qiita の中の人が Arda というフレームワークを作ってる
17
React.js を使ってみた感想
Shumpei Hozumi
1. 本家
https://facebook.github.io/react/index.html
Docs の Thinking in React が概念を学ぶのに良いのでおすすめ
2. 仮想DOMに魂が震えている人(Qiitaの中の人)
http://qiita.com/mizchi/items/4d25bc26def1719d52e6
React.js の根幹である仮想DOMについてよくわかるのでおすすめ
18
参考になったサイト
Shumpei Hozumi

More Related Content

PPTX
Rubyによるクローラー開発
PDF
Anemoneによるクローラー入門
PDF
Capybaraで雑にWebスクレイピング
PDF
Rubyで始めるWebスクレイピング
PDF
JAWSUG architecture-crowler
PDF
Rubyで作るクローラー Ruby crawler
PPTX
Sails.jsのメリット・デメリット
PDF
MVCフレームワーク Sails.jsについて機能紹介
Rubyによるクローラー開発
Anemoneによるクローラー入門
Capybaraで雑にWebスクレイピング
Rubyで始めるWebスクレイピング
JAWSUG architecture-crowler
Rubyで作るクローラー Ruby crawler
Sails.jsのメリット・デメリット
MVCフレームワーク Sails.jsについて機能紹介

What's hot (20)

PDF
今日からはじめるCSP(Kernel/VM@Okinawa)
PPT
[大図解]ピグライフはこう動いている
PDF
JekyllとBootstrapを使って静的なブログを作ってみたよ
PDF
Node.jsで始める Modern JavaScript Framework
PDF
Getting start with knockout.js
PDF
CSP Lv.2の話
PPTX
ブラウザとWebサーバとXSSの話@Shibuya.xss
PPT
Node.js で Web アプリ開発
PDF
Node js 入門
PDF
Node.js を選ぶとき 選ばないとき
PDF
Hello, Node.js
PDF
About SnapKit - Open source lab -
PDF
TypeScriptへの入口
PPT
maven2+aptで楽々ドキュメント
PDF
Node.jsでブラウザメッセンジャー
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
PDF
Node.jsでサーバプログラマ デビューしよう
PPTX
Node.jsではじめるサーバ構築
PDF
Node.js入門
PDF
20150207 elastic loadbalancer
今日からはじめるCSP(Kernel/VM@Okinawa)
[大図解]ピグライフはこう動いている
JekyllとBootstrapを使って静的なブログを作ってみたよ
Node.jsで始める Modern JavaScript Framework
Getting start with knockout.js
CSP Lv.2の話
ブラウザとWebサーバとXSSの話@Shibuya.xss
Node.js で Web アプリ開発
Node js 入門
Node.js を選ぶとき 選ばないとき
Hello, Node.js
About SnapKit - Open source lab -
TypeScriptへの入口
maven2+aptで楽々ドキュメント
Node.jsでブラウザメッセンジャー
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Node.jsでサーバプログラマ デビューしよう
Node.jsではじめるサーバ構築
Node.js入門
20150207 elastic loadbalancer
Ad

Viewers also liked (17)

PDF
スマホ対応
PDF
冴えない動画の育てかた
PDF
Androidアプリ開発
PPTX
レガシコード改善ガイド
PDF
リーン顧客開発
PDF
Google cast開発入門
PPTX
Webサービスを分類してみた
PPTX
コミュニティーマネージャー
PDF
クライアントサイドjavascript簡単紹介
PDF
マジシャン視点で考える心理術
PPTX
Vim活用術 初級編
PDF
グロースハックのマインドセット
PPTX
Startup Science ⑤
PPTX
Startup Science ④
PPTX
おっさんES6/ES2015,React.jsを学ぶ
PDF
解説!30分で分かるLEAN ANALYTICS
PPTX
React.js・ReactNative・Redux入門
スマホ対応
冴えない動画の育てかた
Androidアプリ開発
レガシコード改善ガイド
リーン顧客開発
Google cast開発入門
Webサービスを分類してみた
コミュニティーマネージャー
クライアントサイドjavascript簡単紹介
マジシャン視点で考える心理術
Vim活用術 初級編
グロースハックのマインドセット
Startup Science ⑤
Startup Science ④
おっさんES6/ES2015,React.jsを学ぶ
解説!30分で分かるLEAN ANALYTICS
React.js・ReactNative・Redux入門
Ad

Similar to Reactjs (20)

PPTX
React入門
PDF
Start React with Browserify
PDF
Intoroduction to React.js
PDF
React introduntion
PDF
React entry
PPTX
Hello, React!! まで導く Reactの基礎
PPTX
SYSTEMI勉強会まとめ資料(React基礎まとめ)
PPTX
Reactつかってみた
PDF
React vtecx20171025
PPTX
今からでも遅くない! React事始め
PPTX
Reactに触れてみた
PDF
React.jsでクライアントサイドなWebアプリ入門
PDF
フロントエンド開発入門(React).pdf
PDF
SPAを選択した理由とその結果 ~Reactを添えて~
PDF
React+TypeScriptもいいぞ
PDF
React Native 入門
PPTX
さわってみようReact.js、AngularJS(1系、2系)
PDF
raect.jsを触ったお話
PDF
React.js + Flux
PPTX
Reactのおさらい
React入門
Start React with Browserify
Intoroduction to React.js
React introduntion
React entry
Hello, React!! まで導く Reactの基礎
SYSTEMI勉強会まとめ資料(React基礎まとめ)
Reactつかってみた
React vtecx20171025
今からでも遅くない! React事始め
Reactに触れてみた
React.jsでクライアントサイドなWebアプリ入門
フロントエンド開発入門(React).pdf
SPAを選択した理由とその結果 ~Reactを添えて~
React+TypeScriptもいいぞ
React Native 入門
さわってみようReact.js、AngularJS(1系、2系)
raect.jsを触ったお話
React.js + Flux
Reactのおさらい

Reactjs

  • 1. Shumpei Hozumi 穂積 俊平 しくみ製作所 福島支部 “React.js” と戯れてみた
  • 2. 1. React.js とは? 2. 競合 3. 競合の問題点 4. 3つの特徴 5. 記述方法 6. 使ってみた感想 7. 参考サイト 2 目次 Shumpei Hozumi
  • 3. 1. Facebook が開発している JavaScript ライブラリ MVC の V(View) を開発するためのライブラリ 2. 導入実績 1. Facebook 2. Instagram 3. Yahoo 4. AirBnB 3 React.js とは? Shumpei Hozumi
  • 4. 1. 特徴 1. フルスタックな MVW (Whatever) フレームワーク 2. 双方向データバインディング(dirty checking 方式) 3. テンプレートとしてのHTML 2. 本家サンプル https://angularjs.org/ 4 競合(AngularJS) Shumpei Hozumi
  • 5. 1. フルスタックゆえに学習コスト高い 勉強すべき概念が多い 2. 大規模な場合、再描画速度が問題になることが多い dirty checking は、バインドしている全ての変数について、特定 のタイミングで値の変更がないか確認を行うため、変数が増え るにつれ遅くなる 3. 双方向バインディングでは処理の流れが追いにくい 内部の処理が完全に隠蔽化されているので、デバッグが難しい 5 AngularJS の問題点 Shumpei Hozumi
  • 6. 1. View に特化(Model もちょっとサポート) 学習コストが低いのでとっつきやすい 2. 仮想 DOM という概念を導入 仮想DOMの比較により、再描画の範囲を最小限にし、高速化 3. 一方向のデータフロー 常に一方向に流れるので処理が追いやすい 6 React.js の3つの特徴 Shumpei Hozumi
  • 7. 1. HTMLインスタンスと1対1で対応する単純な構造体 2. 再描画範囲の特定のために用いられる 1. 状態変更前後の仮想DOMの差分を計算 2. 差分を元にDOMの変更パッチを作成 3. HTMLインスタンスにパッチを反映 7 仮想DOM Shumpei Hozumi State A:<div class=‘hoge’>AAA</div> State B:<div class=‘hoge’>BBB</div> 作られる差分:hoge の text に -AAA+BBB 変更パッチ:node.querySelector(‘.hoge’).innerHTML =‘BBB’ 大雑把な例
  • 8. 1. Model から View へのデータフローのみ提供 1. 処理を明示的に書く必要がある 明示的に書かれているので混乱しにくい 明示的に書く必要があるのでやや冗長に感じる 8 一方向のデータフロー Shumpei Hozumi Model View
  • 9. 1. Flux というアーキテクチャで構成すると良い 1. Facebook が提唱しているデータフローアーキテクチャ 2. Flux を構成する基礎的な機能を React.js が提供 1. 正直ほとんど提供されていない… 9 一方向のデータフロー Shumpei Hozumi Action Dispatcher Store View Action
  • 10. 1. JSX という独自文法を備える 1. HTML をそのまま js ファイル中に書ける 2. 拡張子に .jsx を付け、コンパイルする必要あり 3. CoffeeScript で書く場合はバッククォートで囲む必要あり 10 記述方法(JSX) Shumpei Hozumi CalendarHeaderTitle = React.createClass render: -> `<h2> カレンダー</h2>` CalendarHeaderBtn = React.createClass render: -> `<p className="schedules-btn"> <a className="button-white" href="#"> 予定を追加する </a> </p>` 記述例 : calendar.js.jsx.coffee
  • 11. 1. JSX という独自文法を備える 1. 階層化が直感的に書ける 2. class は className と書く必要あり。js の予約語のため。 11 記述方法(JSX) Shumpei Hozumi CalendarHeader = React.createClass render: -> `<div className="schedules-heading"> <CalendarHeaderTitle /> <CalendarHeaderBtn /> </div>` 階層化の記述例
  • 12. 1. JSX という独自文法を備える 1. 繰り返しをサポートする文法がある 2. でも、繰り返しの記述は辛い… 12 記述方法(JSX) Shumpei Hozumi CalendarContentWeek = React.createClass render: -> days = [] _.each this.props.week, (day)-> days.push `<CalendarContentDay day={day}/>` `<tr>{days}</tr>` 繰り返しの記述例
  • 13. 1. props と state で管理 1. props は親コンポーネントから渡される状態 2. state はコンポーネント自身が保持する状態 13 状態管理 Shumpei Hozumi CalendarContentWeek = React.createClass render: -> days = [] _.each this.props.week, (day)-> days.push `<CalendarContentDay day={day}/>` `<tr>{days}</tr>` CalendarContentDay = React.createClass render: -> `<td> <div>{this.props.day.date}</div> </td>` props の利用例
  • 14. 1. props と state で管理 1. props は親コンポーネントから渡される状態 2. state はコンポーネント自身が保持する状態 14 状態管理 Shumpei Hozumi CalendarContentDay = React.createClass getInitialState: -> { clicked:false } render: -> clazz = “” if this.state.clicked clazz = “active” `<td className={clazz}> <div>{this.props.day.date}</div> </td>` state の利用例
  • 15. 1. props と state で管理する際の注意点 1. なるべく props を活用するようにする(状態数を少なくする) 2. state はなるべく下層に持たせる(stateが影響する範囲を小さく) 15 状態管理の注意点 Shumpei Hozumi
  • 16. 1. onClick などの属性を利用して書く必要がある ピュアな HTML + JavaScript と変わらない… 2. setState を使って状態を更新することで状態変化が伝播する 16 状態の変化の伝播 Shumpei Hozumi CalendarContentDay = React.createClass makeActive: -> this.setState({clicked:true}) render: -> clazz = “” if this.state.clicked clazz = “active” `<td className={clazz} onClick=“this.makeActive”> <div>{this.props.day.date}</div> </td>` 記述例
  • 17. 1. 利点 1. 再描画が高速らしい… 重い処理させてないから実感はない 2. データフローを明確に書くのでデバッグしやすい 3. 学習コストが低く、とっつきやすい。 2. 欠点 1. 全体的に書き心地がよくない JSX が使いにくい View に関するコードが散在する → react-jade に期待。本家 jade が製造。 2. 機能的に色々足りていない気がする → Flux フレームワークが色々出てきてる。 Qiita の中の人が Arda というフレームワークを作ってる 17 React.js を使ってみた感想 Shumpei Hozumi
  • 18. 1. 本家 https://facebook.github.io/react/index.html Docs の Thinking in React が概念を学ぶのに良いのでおすすめ 2. 仮想DOMに魂が震えている人(Qiitaの中の人) http://qiita.com/mizchi/items/4d25bc26def1719d52e6 React.js の根幹である仮想DOMについてよくわかるのでおすすめ 18 参考になったサイト Shumpei Hozumi