Qraft(クラフト) 資格・学習クイズアプリ

React入門 練習問題 51:propsの基礎

次のコードを実行した場合、ボタンをクリックしたときの動作として正しいものはどれですか?

```jsx
import React from 'react';

function ParentComponent() {
const handleClick = (greeting) => {
alert(greeting);
};

return (
<div>
<h1>Propsのデモ</h1>
<ChildComponent
message="ボタンを押してください"
onButtonClick={handleClick}
/>
</div>
);
}

function ChildComponent({ message, onButtonClick }) {
return (
<div>
<p>{message}</p>
<button onClick={() => onButtonClick('こんにちは')}>挨拶する</button>
</div>
);
}
```

  1. 「ボタンを押してください」というアラートが表示される
  2. 「こんにちは」というアラートが表示される
  3. コンソールにエラーが表示される
  4. 何も起こらない
  5. 「ボタンを押してください」と「こんにちは」の両方のアラートが順番に表示される

Qraftユーザーの成績:難易度 Dランク(レーティング1113)・正答率 43%(13/30回正解)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)

正解と解説を見る
正解:「こんにちは」というアラートが表示される

親コンポーネントから子コンポーネントへ関数をpropsとして渡し、子コンポーネント側でその関数を呼び出す際に引数を渡すことができます。この設問では、ボタンクリック時にonButtonClick('こんにちは')が実行されるため、「こんにちは」というアラートが表示されるのが正しい動作です。

【正解の理由】
ChildComponentのボタンがクリックされると、propsで受け取ったonButtonClick関数(実体はParentComponentのhandleClick)が'こんにちは'という引数付きで呼び出されます。handleClickはその引数をそのままalertで表示するため、「こんにちは」が表示されます。

【不正解の理由】
• 「『ボタンを押してください』というアラートが表示される」:この文字列はmessage propとして<p>に表示されるだけで、alertには渡されていません。
• 「コンソールにエラーが表示される」:propsの受け渡しは正しく行われており、構文・論理エラーはありません。
• 「何も起こらない」:onClickハンドラが正しく設定されているため、クリックすると必ずalertが実行されます。
• 「両方のアラートが順番に表示される」:alertはhandleClick内で1回しか呼び出されていないため、複数のアラートが表示されることはありません。

← 前の問題問題一覧次の問題 →
アプリで解いてレーティングを上げる(無料・登録不要)