SlideShare a Scribd company logo
React Componentの
コンストラクタを
追いかけて
2015/09/08 React Meetup #2
hosomichi
自己紹介
と申します
自己紹介
所属
・Reactを活用した開発業務(5ヶ月少々)
・インターネット広告タグの開発
・その他何でも(バックエンド/インフラ/Android/マネジメント)
を生業としております
私めの課題感
React初学者への
作法説明がゆるい
私めの課題感
私めの課題感
例えば
のようなコード
私めの課題感
私めの課題感
私めの課題感
私めの課題感
いわゆるJSコンストラクタと異なる構文に対して、
役割理解・整理が仕切れておらず
上手に説明ができていない自分がいるなーと
私めの課題感
という課題を解決すべく、
ソースコード(0.13.3)を
追うことでReactの裏側の
理解を深めつつ整理しました
①コンストラクタ生成
①コンストラクタ生成
・内部的にReactClass.createClassをコール
・引数オブジェクトは内部的にはspecと名付け
・Constructorという名のコンストラクタ関数を返却
spec
①コンストラクタ生成
・ES6型のクラス定義もコンストラクタ関数を提供
・上記の場合はHosoComponentという
コンストラクタ関数になりますね
①コンストラクタ生成
最終的に↑のような
コンストラクタ関数が出来上がります
※便宜上Componentコンストラクタ、
実体をComponentインスタンスと呼びます
Constructor
prototype
spec
①コンストラクタ生成
注)specはprototypeに納められます。
specのメンバは全てのComponentインスタンスでア
クセス可能・共有されます。
Constructor
prototype
spec
prototype
②ReactElement生成
②ReactElement生成
・内部的にはReactElement.createElementをコール
・Componentコンストラクタ・propsを受け取り
ReactElementインスタンスを返す
JSXと関数コール(やっていることは同じ)
②ReactElement生成
・生成されたReactElementは↑のような感じです
・第一引数に指定したComponentコンストラクタは
typeというメンバに納められます
ReactElementインスタンス
type
key
props
ref
ところで、まだコンストラクタは
実行されていませんよね・・・
どこでコンストラクトしてるのか・・・
わくわく♪
③React.render
③React.render
・引数にReactElementとコンテナ要素を受け取って
画面描画を実行
・戻り値としてComponentコンストラクタの
結果値であるインスタンスを返す
③React.render
render工程の道のりは長いのですが・・・
ReactMount
ReactUpdate
ReactReconciler
ReactCompositeComponent
③React.render
ReactCompositeComponent.mountComponent
にてインスタンスを生成していました
③React.render
ここでReactElementに渡したpropsが引数となり
インスタンスごとの固有データもここで入ります
④最後にthisについて
このthisはComponentインスタンスそのものと
いうことでした
まとめます
①createClassはComponentコンストラクタを生成
②ReactElementはコンストラクタとprops/key/refを紐付けたデータ構造
③ComponentインスタンスはReact.render中に生成される
④renderメソッドなどの内部のthisはComponentインスタンスそのもの
①
④
②③
最後に
一句詠みます
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて
React componentのコンストラクタを追いかけて

More Related Content

PDF
PHPUnitでリファクタリング
Takako Miyagawa
 
PDF
PHPカンファレンス関西 2011
Takako Miyagawa
 
PDF
2011 PHPカンファレンス関西 懇親会LT
Takako Miyagawa
 
PDF
Code igniter + ci phpunit-test
ME iBotch
 
PDF
Codeigniter3フレームアップデート
tomohiro kitaura
 
PDF
VSCodeへコントリビュート / Contribute to VSCode
Yusuke Yamada
 
PPTX
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
 
PPTX
OmegaTでドキュメント翻訳
Takako Miyagawa
 
PHPUnitでリファクタリング
Takako Miyagawa
 
PHPカンファレンス関西 2011
Takako Miyagawa
 
2011 PHPカンファレンス関西 懇親会LT
Takako Miyagawa
 
Code igniter + ci phpunit-test
ME iBotch
 
Codeigniter3フレームアップデート
tomohiro kitaura
 
VSCodeへコントリビュート / Contribute to VSCode
Yusuke Yamada
 
PHPCON fukuoka 2015 CodeIgniter update
Takako Miyagawa
 
OmegaTでドキュメント翻訳
Takako Miyagawa
 

What's hot (20)

PPTX
CodeIgniterのライセンスについて
Takako Miyagawa
 
PDF
Code igniterを初めて使うときにはまった4つのポイント
noldor
 
PDF
Microsoft Build 2021 前夜祭LT
Yusuke Yamada
 
PDF
CodeIgniter をモダンに改造してみた
Masaru Matsuo
 
PDF
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
PDF
JSオジサン openframeworks emscripten
minoru nakanou
 
PDF
レビューで保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
 
PDF
トランザクションスクリプトのすすめ
pospome
 
ODP
どこに何を書くのか?
pospome
 
PPTX
開発現場で使えるかもしれないGroovy
zgmf_mbfp03
 
PDF
アプリケーションコードにおける技術的負債について考える
pospome
 
PDF
Node塾 講義その6 テスト駆動java script 読書会 1回目
Nomo Kiyoshi
 
PDF
CodeIgniter 最新情報 2011 (増補版)
kenjis
 
PPTX
フロントエンドというカオスな世界について
mikakane
 
PPTX
8th july2013 packaged_apps_codelab
Kensaku Komatsu
 
PDF
CodeIgniter 最新情報 2010
kenjis
 
PPTX
保守しやすいコードの反面教師​ (アンチパターン) その1
keitasudo1
 
PPTX
開発チームにKotlinを導入した話
Hiroshi Kikuchi
 
PPTX
勉強会用資料:Javaアプリ作成
ssuser331f24
 
PDF
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
Tomohiro Yamasaki
 
CodeIgniterのライセンスについて
Takako Miyagawa
 
Code igniterを初めて使うときにはまった4つのポイント
noldor
 
Microsoft Build 2021 前夜祭LT
Yusuke Yamada
 
CodeIgniter をモダンに改造してみた
Masaru Matsuo
 
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
 
JSオジサン openframeworks emscripten
minoru nakanou
 
レビューで保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
 
トランザクションスクリプトのすすめ
pospome
 
どこに何を書くのか?
pospome
 
開発現場で使えるかもしれないGroovy
zgmf_mbfp03
 
アプリケーションコードにおける技術的負債について考える
pospome
 
Node塾 講義その6 テスト駆動java script 読書会 1回目
Nomo Kiyoshi
 
CodeIgniter 最新情報 2011 (増補版)
kenjis
 
フロントエンドというカオスな世界について
mikakane
 
8th july2013 packaged_apps_codelab
Kensaku Komatsu
 
CodeIgniter 最新情報 2010
kenjis
 
保守しやすいコードの反面教師​ (アンチパターン) その1
keitasudo1
 
開発チームにKotlinを導入した話
Hiroshi Kikuchi
 
勉強会用資料:Javaアプリ作成
ssuser331f24
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
Tomohiro Yamasaki
 
Ad

Similar to React componentのコンストラクタを追いかけて (20)

PPTX
The First React on Rails
Kohei Ito
 
PDF
フロントエンド開発入門(React).pdf
KSato2
 
PDF
React.jsでHowManyPizza
松田 千尋
 
PPTX
社内LTネタ ReactNative
Oguri Toru
 
PDF
Riot.jsに触れてみた話
エンジニア勉強会 エスキュービズム
 
PDF
React introduntion
YutaShimabukuro
 
PPTX
React Native + Expoでアプリを開発してみた話
GIG inc.
 
PDF
RailsでReact.jsを動かしてみた話
yoshioka_cb
 
PDF
Storybook web-and-circleci
Jesse Katsumata
 
PPTX
SYSTEMI勉強会まとめ資料(日記アプリ作成)
YoshikiWatanabe1
 
PDF
Create android app can send SMS and Email by React Natice
GMO-Z.com Vietnam Lab Center
 
PPTX
React Nativeでお絵描きしてみた
kazuki matsumura
 
PPTX
React Nativeで始めるアプリ開発
Ryosuke Hara
 
PPTX
SYSTEMI勉強会まとめ資料(React基礎まとめ)
YoshikiWatanabe1
 
PDF
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
Masayuki Uehara
 
PDF
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
 
PPTX
React ContextとPropの違いについて
faliplvsg
 
PPTX
React Nativeで考えるクロスプラットフォーム開発
yuichi kubota
 
PDF
Responsableを使ったadr実装
Kenjiro Kubota
 
PDF
react-native.pdf
DaikiSato10
 
The First React on Rails
Kohei Ito
 
フロントエンド開発入門(React).pdf
KSato2
 
React.jsでHowManyPizza
松田 千尋
 
社内LTネタ ReactNative
Oguri Toru
 
React introduntion
YutaShimabukuro
 
React Native + Expoでアプリを開発してみた話
GIG inc.
 
RailsでReact.jsを動かしてみた話
yoshioka_cb
 
Storybook web-and-circleci
Jesse Katsumata
 
SYSTEMI勉強会まとめ資料(日記アプリ作成)
YoshikiWatanabe1
 
Create android app can send SMS and Email by React Natice
GMO-Z.com Vietnam Lab Center
 
React Nativeでお絵描きしてみた
kazuki matsumura
 
React Nativeで始めるアプリ開発
Ryosuke Hara
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
YoshikiWatanabe1
 
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
Masayuki Uehara
 
ゼロからのプログラミングRails講座 Codeanywhere版
DIVE INTO CODE Corp.
 
React ContextとPropの違いについて
faliplvsg
 
React Nativeで考えるクロスプラットフォーム開発
yuichi kubota
 
Responsableを使ったadr実装
Kenjiro Kubota
 
react-native.pdf
DaikiSato10
 
Ad

React componentのコンストラクタを追いかけて