React入門 - 5. propsの使い方

5. propsの使い方

これまでの学習で、関数コンポーネントを定義して画面に "Hello World!" と出力することができました。次はコンポーネント間でのデータの受け渡しについて確認していこうと思います。以前に作成したReactアプリケーションでは App コンポーネントの中で Hello コンポーネントを定義しています。src フォルダの App.js を確認してみましょう。

import logo from './logo.svg';
import './App.css';
import Hello from './Hello';

function App() {
  return (
    <Hello />
  );
}

export default App;

ここでは Hello コンポーネントの利用時にデータを受け渡すことができるようにプログラムを修正します。具体的には次のように Hello コンポーネントを利用することを目指します。

    <Hello name="React" />

上記のコードを見るとJSXによる <Hello> コンポーネントの定義に name="React" が追記されています。Reactのコンポーネントはこのような属性値やあるいは子要素の指定を props と呼ばれる仕組みを使って実現できるようになっています。

props とはコンポーネントのプロパティを意味します

Hello.js に props を追加する

それでは props を使ってデータを受け取ることができるように Hello.js を修正してみましょう。

function Hello(props) {
    return (
        <h1>Hello {props.name}!</h1>
    )
}
export default Hello;

修正箇所は2箇所あります。まず1つ目は Hello 関数に引数 props が追加されています。

function Hello(props) {
    // ...省略
}

Reactの関数コンポーネントはこのように引数で props を受け取ることができます。

それから修正箇所の2つ目を見てみましょう。Hello 関数の内部を見ると <h1> タグによる出力部分において props を参照するように修正しています。

        <h1>Hello {props.name}!</h1>

JSXでは変数の値を動的に出力する際には {} を使います。ここでは引数で受け取った propsname プロパティを出力しています。つまり <Hello name="React" /> コンポーネントの name 属性の値( React ) を出力することになります。このように関数コンポーネントは引数 props を経由してコンポーネントのプロパティ(属性値)にアクセスできます。

App.js の修正

さいごに props を受け取るように修正した Hello コンポーネントに合わせて、親コンポーネントである App.js も修正しておきましょう。

import logo from './logo.svg';
import './App.css';
import Hello from './Hello';

function App() {
  return (
    <Hello name="React" />
  );
}

ここでは <Hello name="React" /> と修正しています。さきほど修正した Hello コンポーネントに対して name プロパティに "React" と指定しています。

動作確認

それではブラウザからアクセスして動作を確認しておきましょう。 npm start によって開発サーバを起動した状態で、ブラウザを開いて http://localhost:3000 にアクセスすると次のような結果を確認できるでしょう。

上記のように <Hello name="React" /> コンポーネントによる出力結果である Hello React! というメッセージを確認できます。Reactアプリケーションの開発では、コンポーネント間のデータの受け渡しに props を使います。注意点としては props によるデータの受け渡しは常に一方向です。親コンポーネントから子コンポーネントへとデータを渡すように実装します。

ここでは props を使ったコンポーネント間のデータの受け渡しについて学習しました。次はコンポーネントにおいてstate(状態)を管理する方法について学習します。