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

What's hot

CodeIgniterのライセンスについて
CodeIgniterのライセンスについてCodeIgniterのライセンスについて
CodeIgniterのライセンスについて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 前夜祭LTYusuke 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 emscriptenminoru nakanou
 
レビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみたレビューで保守性のためにした コメントをふりかえってみた
レビューで保守性のためにした コメントをふりかえってみたTakhisa Hirokawa
 
トランザクションスクリプトのすすめ
トランザクションスクリプトのすすめトランザクションスクリプトのすすめ
トランザクションスクリプトのすすめpospome
 
どこに何を書くのか?
どこに何を書くのか?どこに何を書くのか?
どこに何を書くのか?pospome
 
開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovy開発現場で使えるかもしれないGroovy
開発現場で使えるかもしれないGroovyzgmf_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_codelabKensaku Komatsu
 
CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010CodeIgniter 最新情報 2010
CodeIgniter 最新情報 2010kenjis
 
保守しやすいコードの反面教師​ (アンチパターン) その1
保守しやすいコードの反面教師​ (アンチパターン) その1保守しやすいコードの反面教師​ (アンチパターン) その1
保守しやすいコードの反面教師​ (アンチパターン) その1keitasudo1
 
開発チームにKotlinを導入した話
開発チームにKotlinを導入した話開発チームにKotlinを導入した話
開発チームにKotlinを導入した話Hiroshi Kikuchi
 
勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成勉強会用資料:Javaアプリ作成
勉強会用資料:Javaアプリ作成ssuser331f24
 
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへアプリのテストを書かなければならないと分かっているけども、書けていない人たちへ
アプリのテストを書かなければならないと分かっているけども、書けていない人たちへTomohiro Yamasaki
 

What's hot (20)

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

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

The First React on Rails
The First React on Rails The First React on Rails
The First React on Rails Kohei Ito
 
フロントエンド開発入門(React).pdf
フロントエンド開発入門(React).pdfフロントエンド開発入門(React).pdf
フロントエンド開発入門(React).pdfKSato2
 
React.jsでHowManyPizza
React.jsでHowManyPizzaReact.jsでHowManyPizza
React.jsでHowManyPizza松田 千尋
 
社内LTネタ ReactNative
社内LTネタ ReactNative社内LTネタ ReactNative
社内LTネタ ReactNativeOguri Toru
 
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話GIG inc.
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話yoshioka_cb
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleciJesse Katsumata
 
SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)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 NaticeGMO-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
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)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
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装Kenjiro Kubota
 
react-native.pdf
react-native.pdfreact-native.pdf
react-native.pdfDaikiSato10
 

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
 
フロントエンド開発入門(React).pdf
フロントエンド開発入門(React).pdfフロントエンド開発入門(React).pdf
フロントエンド開発入門(React).pdf
 
React.jsでHowManyPizza
React.jsでHowManyPizzaReact.jsでHowManyPizza
React.jsでHowManyPizza
 
社内LTネタ ReactNative
社内LTネタ ReactNative社内LTネタ ReactNative
社内LTネタ ReactNative
 
Riot.jsに触れてみた話
Riot.jsに触れてみた話Riot.jsに触れてみた話
Riot.jsに触れてみた話
 
React introduntion
React introduntionReact introduntion
React introduntion
 
React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話React Native + Expoでアプリを開発してみた話
React Native + Expoでアプリを開発してみた話
 
RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話RailsでReact.jsを動かしてみた話
RailsでReact.jsを動かしてみた話
 
Storybook web-and-circleci
Storybook web-and-circleciStorybook web-and-circleci
Storybook web-and-circleci
 
SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)SYSTEMI勉強会まとめ資料(日記アプリ作成)
SYSTEMI勉強会まとめ資料(日記アプリ作成)
 
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
 
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみた
 
React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発React Nativeで始めるアプリ開発
React Nativeで始めるアプリ開発
 
SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)SYSTEMI勉強会まとめ資料(React基礎まとめ)
SYSTEMI勉強会まとめ資料(React基礎まとめ)
 
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめコロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
コロナ時代を生き抜く(?) Slackアプリ開発・運用知見まとめ
 
ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版ゼロからのプログラミングRails講座 Codeanywhere版
ゼロからのプログラミングRails講座 Codeanywhere版
 
React ContextとPropの違いについて
React ContextとPropの違いについてReact ContextとPropの違いについて
React ContextとPropの違いについて
 
React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発React Nativeで考えるクロスプラットフォーム開発
React Nativeで考えるクロスプラットフォーム開発
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
react-native.pdf
react-native.pdfreact-native.pdf
react-native.pdf
 

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