質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

2408閲覧

super(props)の役割はなんでしょうか。現在一つしか分かっておりません。

tomoharu

総合スコア107

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2019/05/30 02:38

現在Reactを勉強しています。

表題の通り、super(props)の役割がわかりません。
1つ自分が理解しているのは、以下の記事です。
https://qiita.com/hand-dot/items/61a4b808f110b12e4281
この記事には、super(props)を書かないと、constructor内において、this.propsに接続できないと書いてあり、そちらは理解しました。自分で動かしたりして納得しています。
自分が理解できていないのは、以下のような場合です。

class Counter extends React.Component { constructor(props){ super(props); this.handleAddOne = this.handleAddOne.bind(this) this.handleMinusOne = this.handleMinusOne.bind(this) this.handleReset = this.handleReset.bind(this) this.state = { count: 0 }; } handleAddOne(){ this.setState((prevState) => { return { count: prevState.count + 1 } }) } handleMinusOne(){ console.log("handleMinusOne") } handleReset(){ console.log("handleReset") } render(){ return ( <div> <h1>Count: {this.state.count}</h1> <button onClick={this.handleAddOne}>+1</button> <button onClick={this.handleMinusOne}>-1</button> <button onClick={this.handleReset}>reset</button> </div> ) } } ReactDOM.render(<Counter/>, document.getElementById('app'))

上記コードの場合、特にconstructor内でthis.propsに接続しているわけではありません(していないように見えます)。しかし、super(props)をコメントアウトすると、画面全体が消えてしまいます。
super(props)の役割は、constructor内でthis.propsに接続できるようにすることであると理解していた自分にとっては不可解でした。
ご存知の方はお教えください。
何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

superは親クラス(この場合はReact.Component)の関数呼び出しのキーワードです。
特にコンストラクタでsuper単独で使用される場合は、親クラスの「コンストラクタ」の呼び出しです。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/super

親クラスも、コンストラクタでいろんな処理をしています。

親クラスのコンストラクタがちゃんと呼ばれないと、当然親クラスのコンストラクタ内での処理がなされないので、親クラスの機能が使えなくなります。

この場合は、propsを使うための様々な処理は親クラスのコンストラクタ側がやってくれているので、親クラスのコンストラクタに子クラスのpropsを渡して、処理を依頼する必要がある、ということです。

(もしこれで理解できない場合、まず「クラス」と「継承」について調べた方が良いと思います)

投稿2019/05/30 06:41

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2019/05/30 16:50

了解しました。つまり、子クラスのpropsを親であるreact.componentに渡すということですよね。ありがとうございます。
gentaro

2019/05/30 23:22

解決済みになってないですが、これ以上の説明が必要でしたか?
tomoharu

2019/05/31 01:12

すみません。忘れておりました。。。解決済みにさせていただきます。
guest

0

super(props)の役割は、constructor内でthis.propsに接続できるようにすることであると理解していた自分にとっては不可解でした。

継承したクラスにコンストラクタを書く場合、文法上superを書くことが必須となります(書かないとコンストラクタとして処理されません)。

投稿2019/05/30 02:46

編集2019/05/30 02:47
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tomoharu

2019/05/30 03:38

ご回答ありがとうございます。自分の理解があっているか確認したいのですが、子クラスにおいてconstructorを使うのならば、その中にsuperを書かないと、子クラスの中でconstructorが処理されないという理解でよろしいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問