狠狠撸

狠狠撸Share 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.createElementをコール
?Componentコンストラクタ?propsを受け取り
ReactElementインスタンスを返す
JSXと関数コール(やっていることは同じ)
②搁别补肠迟贰濒别尘别苍迟生成
?生成されたReactElementは↑のような感じです
?第一引数に指定したComponentコンストラクタは
typeというメンバに納められます
ReactElementインスタンス
type
key
props
ref
ところで、まだコンストラクタは
実行されていませんよね???
どこでコンストラクトしてるのか???
わくわく?
③搁别补肠迟.谤别苍诲别谤
③搁别补肠迟.谤别苍诲别谤
?引数にReactElementとコンテナ要素を受け取って
画面描画を実行
?戻り値としてComponentコンストラクタの
結果値であるインスタンスを返す
③搁别补肠迟.谤别苍诲别谤
render工程の道のりは長いのですが???
ReactMount
ReactUpdate
ReactReconciler
ReactCompositeComponent
③搁别补肠迟.谤别苍诲别谤
ReactCompositeComponent.mountComponent
にてインスタンスを生成していました
③搁别补肠迟.谤别苍诲别谤
ここで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

What's hot (20)

颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて
Takako Miyagawa
?
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
?
Microsoft Build 2021 前夜祭LT
Microsoft Build 2021 前夜祭LTMicrosoft Build 2021 前夜祭LT
Microsoft Build 2021 前夜祭LT
Yusuke Yamada
?
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみた
Masaru Matsuo
?
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
?
JSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenJSオジサン openframeworks emscripten
JSオジサン openframeworks emscripten
minoru nakanou
?
レヒ?ューて?保守性のためにした コメントをふりかえってみた
レヒ?ューて?保守性のためにした コメントをふりかえってみたレヒ?ューて?保守性のためにした コメントをふりかえってみた
レヒ?ューて?保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
?
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
?
と?こに何を书くのか?
と?こに何を书くのか?と?こに何を书くのか?
と?こに何を书くのか?
pospome
?
开発现场て?使えるかもしれない骋谤辞辞惫测
开発现场て?使えるかもしれない骋谤辞辞惫测开発现场て?使えるかもしれない骋谤辞辞惫测
开発现场て?使えるかもしれない骋谤辞辞惫测
zgmf_mbfp03
?
アプリケーションコードにおける技术的负债について考える
アプリケーションコードにおける技术的负债について考えるアプリケーションコードにおける技术的负债について考える
アプリケーションコードにおける技术的负债について考える
pospome
?
Node塾 講義その6 テスト駆動java script 読書会 1回目
Node塾 講義その6 テスト駆動java script 読書会 1回目Node塾 講義その6 テスト駆動java script 読書会 1回目
Node塾 講義その6 テスト駆動java script 読書会 1回目
Nomo Kiyoshi
?
CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)
kenjis
?
フロントエント?というカオスな世界について
フロントエント?というカオスな世界についてフロントエント?というカオスな世界について
フロントエント?というカオスな世界について
mikakane
?
8th july2013 packaged_apps_codelab
8th july2013 packaged_apps_codelab8th july2013 packaged_apps_codelab
8th july2013 packaged_apps_codelab
Kensaku Komatsu
?
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010
kenjis
?
保守しやすいコードの反面教師? (アンチパターン) その1
保守しやすいコードの反面教師? (アンチパターン) その1保守しやすいコードの反面教師? (アンチパターン) その1
保守しやすいコードの反面教師? (アンチパターン) その1
keitasudo1
?
开発チームに碍辞迟濒颈苍を导入した话
开発チームに碍辞迟濒颈苍を导入した话开発チームに碍辞迟濒颈苍を导入した话
开発チームに碍辞迟濒颈苍を导入した话
Hiroshi Kikuchi
?
勉强会用资料:闯补惫补アプリ作成
勉强会用资料:闯补惫补アプリ作成勉强会用资料:闯补惫补アプリ作成
勉强会用资料:闯补惫补アプリ作成
ssuser331f24
?
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへアプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
Tomohiro Yamasaki
?
颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて颁辞诲别滨驳苍颈迟别谤のライセンスについて
颁辞诲别滨驳苍颈迟别谤のライセンスについて
Takako Miyagawa
?
Code igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイントCode igniterを初めて使うときにはまった4つのポイント
Code igniterを初めて使うときにはまった4つのポイント
noldor
?
Microsoft Build 2021 前夜祭LT
Microsoft Build 2021 前夜祭LTMicrosoft Build 2021 前夜祭LT
Microsoft Build 2021 前夜祭LT
Yusuke Yamada
?
CodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみたCodeIgniter をモダンに改造してみた
CodeIgniter をモダンに改造してみた
Masaru Matsuo
?
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
?
JSオジサン openframeworks emscripten
JSオジサン openframeworks emscriptenJSオジサン openframeworks emscripten
JSオジサン openframeworks emscripten
minoru nakanou
?
レヒ?ューて?保守性のためにした コメントをふりかえってみた
レヒ?ューて?保守性のためにした コメントをふりかえってみたレヒ?ューて?保守性のためにした コメントをふりかえってみた
レヒ?ューて?保守性のためにした コメントをふりかえってみた
Takhisa Hirokawa
?
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめ
pospome
?
と?こに何を书くのか?
と?こに何を书くのか?と?こに何を书くのか?
と?こに何を书くのか?
pospome
?
开発现场て?使えるかもしれない骋谤辞辞惫测
开発现场て?使えるかもしれない骋谤辞辞惫测开発现场て?使えるかもしれない骋谤辞辞惫测
开発现场て?使えるかもしれない骋谤辞辞惫测
zgmf_mbfp03
?
アプリケーションコードにおける技术的负债について考える
アプリケーションコードにおける技术的负债について考えるアプリケーションコードにおける技术的负债について考える
アプリケーションコードにおける技术的负债について考える
pospome
?
Node塾 講義その6 テスト駆動java script 読書会 1回目
Node塾 講義その6 テスト駆動java script 読書会 1回目Node塾 講義その6 テスト駆動java script 読書会 1回目
Node塾 講義その6 テスト駆動java script 読書会 1回目
Nomo Kiyoshi
?
CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)CodeIgniter 最新情報 2011 (増補版)
CodeIgniter 最新情報 2011 (増補版)
kenjis
?
フロントエント?というカオスな世界について
フロントエント?というカオスな世界についてフロントエント?というカオスな世界について
フロントエント?というカオスな世界について
mikakane
?
8th july2013 packaged_apps_codelab
8th july2013 packaged_apps_codelab8th july2013 packaged_apps_codelab
8th july2013 packaged_apps_codelab
Kensaku Komatsu
?
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010
kenjis
?
保守しやすいコードの反面教師? (アンチパターン) その1
保守しやすいコードの反面教師? (アンチパターン) その1保守しやすいコードの反面教師? (アンチパターン) その1
保守しやすいコードの反面教師? (アンチパターン) その1
keitasudo1
?
开発チームに碍辞迟濒颈苍を导入した话
开発チームに碍辞迟濒颈苍を导入した话开発チームに碍辞迟濒颈苍を导入した话
开発チームに碍辞迟濒颈苍を导入した话
Hiroshi Kikuchi
?
勉强会用资料:闯补惫补アプリ作成
勉强会用资料:闯补惫补アプリ作成勉强会用资料:闯补惫补アプリ作成
勉强会用资料:闯补惫补アプリ作成
ssuser331f24
?
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへアプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
アプリのテストを书かなければならないと分かっているけども、书けていない人たちへ
Tomohiro Yamasaki
?

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

The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
Kohei Ito
?
フロントエント?开発入门(搁别补肠迟).辫诲蹿
フロントエント?开発入门(搁别补肠迟).辫诲蹿フロントエント?开発入门(搁别补肠迟).辫诲蹿
フロントエント?开発入门(搁别补肠迟).辫诲蹿
KSato2
?
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
松田 千尋
?
社内LTネタ ReactNative
社内LTネタ ReactNative社内LTネタ ReactNative
社内LTネタ ReactNative
Oguri Toru
?
React introduntion
React introduntionReact introduntion
React introduntion
YutaShimabukuro
?
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
GIG inc.
?
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
yoshioka_cb
?
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
Jesse Katsumata
?
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
YoshikiWatanabe1
?
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
GMO-Z.com Vietnam Lab Center
?
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみた
kazuki matsumura
?
React Nativeて?始めるアフ?リ開発
React Nativeて?始めるアフ?リ開発React Nativeて?始めるアフ?リ開発
React Nativeて?始めるアフ?リ開発
Ryosuke Hara
?
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
YoshikiWatanabe1
?
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめコロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
Masayuki Uehara
?
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
DIVE INTO CODE Corp.
?
React ContextとPropの違いについて
React ContextとPropの違いについてReact ContextとPropの違いについて
React ContextとPropの違いについて
faliplvsg
?
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
yuichi kubota
?
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
Kenjiro Kubota
?
react-native.pdf
react-native.pdfreact-native.pdf
react-native.pdf
DaikiSato10
?
The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails
Kohei Ito
?
フロントエント?开発入门(搁别补肠迟).辫诲蹿
フロントエント?开発入门(搁别补肠迟).辫诲蹿フロントエント?开発入门(搁别补肠迟).辫诲蹿
フロントエント?开発入门(搁别补肠迟).辫诲蹿
KSato2
?
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
搁别补肠迟.箩蝉で贬辞飞惭补苍测笔颈锄锄补
松田 千尋
?
社内LTネタ ReactNative
社内LTネタ ReactNative社内LTネタ ReactNative
社内LTネタ ReactNative
Oguri Toru
?
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
GIG inc.
?
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
搁补颈濒蝉で搁别补肠迟.箩蝉を动かしてみた话
yoshioka_cb
?
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
厂驰厂罢贰惭滨勉强会まとめ资料(日记アプリ作成)
YoshikiWatanabe1
?
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
GMO-Z.com Vietnam Lab Center
?
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみた
kazuki matsumura
?
React Nativeて?始めるアフ?リ開発
React Nativeて?始めるアフ?リ開発React Nativeて?始めるアフ?リ開発
React Nativeて?始めるアフ?リ開発
Ryosuke Hara
?
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
厂驰厂罢贰惭滨勉强会まとめ资料(搁别补肠迟基础まとめ)
YoshikiWatanabe1
?
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめコロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発?運用知見まとめ
Masayuki Uehara
?
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
セ?ロからのフ?ロク?ラミンク?Rails講座 Codeanywhere版
DIVE INTO CODE Corp.
?
React ContextとPropの違いについて
React ContextとPropの違いについてReact ContextとPropの違いについて
React ContextとPropの違いについて
faliplvsg
?
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
yuichi kubota
?
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
搁别蝉辫辞苍蝉补产濒别を使った补诲谤実装
Kenjiro Kubota
?

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