SlideShare a Scribd company logo
1 of 18
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

What's hot

今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)今日からはじめるCSP(Kernel/VM@Okinawa)
今日からはじめるCSP(Kernel/VM@Okinawa)cocoa_dahlia
 
[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いている[大図解]ピグライフはこう動いている
[大図解]ピグライフはこう動いているAkihiro Kuwano
 
JekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよJekyllとBootstrapを使って静的なブログを作ってみたよ
JekyllとBootstrapを使って静的なブログを作ってみたよMatsuo Obu
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Frameworkkamiyam .
 
Getting start with knockout.js
Getting start with knockout.jsGetting start with knockout.js
Getting start with knockout.jsAkio Ishida
 
ブラウザとWebサーバとXSSの話@Shibuya.xss
ブラウザとWebサーバとXSSの話@Shibuya.xssブラウザとWebサーバとXSSの話@Shibuya.xss
ブラウザとWebサーバとXSSの話@Shibuya.xssToshiharu Sugiyama
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発Tatsumi Naganuma
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときRyunosuke SATO
 
About SnapKit - Open source lab -
About SnapKit - Open source lab -About SnapKit - Open source lab -
About SnapKit - Open source lab -Daisuke Yamashita
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
maven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメントmaven2+aptで楽々ドキュメント
maven2+aptで楽々ドキュメントYoichiro Tanaka
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発するHiroyuki Kusu
 
Node.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようNode.jsでサーバプログラマ デビューしよう
Node.jsでサーバプログラマ デビューしようYuusuke Takeuchi
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築AimingStudy
 
20150207 elastic loadbalancer
20150207 elastic loadbalancer20150207 elastic loadbalancer
20150207 elastic loadbalancerDaiki Mori
 

What's hot (20)

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

Viewers also liked

冴えない動画の育てかた
冴えない動画の育てかた冴えない動画の育てかた
冴えない動画の育てかたしくみ製作所
 
レガシコード改善ガイド
レガシコード改善ガイドレガシコード改善ガイド
レガシコード改善ガイドしくみ製作所
 
Webサービスを分類してみた
Webサービスを分類してみたWebサービスを分類してみた
Webサービスを分類してみたしくみ製作所
 
コミュニティーマネージャー
コミュニティーマネージャーコミュニティーマネージャー
コミュニティーマネージャーしくみ製作所
 
クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介クライアントサイドjavascript簡単紹介
クライアントサイドjavascript簡単紹介しくみ製作所
 
マジシャン視点で考える心理術
マジシャン視点で考える心理術マジシャン視点で考える心理術
マジシャン視点で考える心理術しくみ製作所
 
グロースハックのマインドセット
グロースハックのマインドセットグロースハックのマインドセット
グロースハックのマインドセットしくみ製作所
 
おっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶおっさんES6/ES2015,React.jsを学ぶ
おっさんES6/ES2015,React.jsを学ぶdcubeio
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICSしくみ製作所
 
React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門React.js・ReactNative・Redux入門
React.js・ReactNative・Redux入門Kazuhiro Yoshimoto
 

Viewers also liked (17)

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

Similar to Reactjs

Create android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React NaticeCreate android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React NaticeGMO-Z.com Vietnam Lab Center
 
pi-11. 多相性, インターフェイス, デザインパターン
pi-11. 多相性, インターフェイス, デザインパターンpi-11. 多相性, インターフェイス, デザインパターン
pi-11. 多相性, インターフェイス, デザインパターンkunihikokaneko1
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験AdvancedTechNight
 
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeePublic 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeeYoshiharu Hashimoto
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_patternyusuke shibui
 
Javaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイルJavaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイルMaaya Ishida
 
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Yoshitaka Seo
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?好洋 山崎
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)Daisuke Yamazaki
 
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyinatus
 
第2回勉強会
第2回勉強会第2回勉強会
第2回勉強会Mugen Fujii
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験miso- soup3
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja77web
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストOhishi Mikage
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasstkyon mm
 

Similar to Reactjs (20)

Create android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React NaticeCreate android app can send SMS and Email by React Natice
Create android app can send SMS and Email by React Natice
 
pi-11. 多相性, インターフェイス, デザインパターン
pi-11. 多相性, インターフェイス, デザインパターンpi-11. 多相性, インターフェイス, デザインパターン
pi-11. 多相性, インターフェイス, デザインパターン
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaeePublic 20100828 j_ruby_kaigi_10things_jror_with_javaee
Public 20100828 j_ruby_kaigi_10things_jror_with_javaee
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_pattern
 
Javaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイルJavaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイル
 
Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方Azure Machine Leaning Workbench の使い方
Azure Machine Leaning Workbench の使い方
 
JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?JavaScriptフレームワーク入門にVue.jsはいかが?
JavaScriptフレームワーク入門にVue.jsはいかが?
 
20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)20140523 jQuery基礎 (HTML5ビギナーズ)
20140523 jQuery基礎 (HTML5ビギナーズ)
 
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlexFlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
 
Beginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_studyBeginning Java EE 6 勉強会(3) #bje_study
Beginning Java EE 6 勉強会(3) #bje_study
 
第2回勉強会
第2回勉強会第2回勉強会
第2回勉強会
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験
 
Groovyコンファレンス
GroovyコンファレンスGroovyコンファレンス
Groovyコンファレンス
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
 
React introduntion
React introduntionReact introduntion
React introduntion
 
Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst詳解!自動結合テスト #jasst
詳解!自動結合テスト #jasst
 

Recently uploaded

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 

Recently uploaded (12)

知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

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