Reactで親から子へ値の受け渡し

React_icon React
この記事は約6分で読めます。

この記事は以下の方を対象に書いています。

  • Reactを学び始めた方
  • コンポーネントを作成したい方
  • 親から子へ値の受け渡しをしたい方

実現したいこと

今回は、ReactとTypeScriptを使用して親から子へ値の受け渡しについて、解説します。

イメージとしては、下図のようになります。

react_useState_value_description1
イメージ

新規プロジェクトの作成

今回は、初学者向けの解説になるため、プロジェクトの作成方法から行っていきます。

既に知っている方は飛ばしてください。

Reactプロジェクトの作成

まずは、作業用のフォルダを作ってみましょう。

(場所はどこでもいいですが、分かりやすい場所が良いです)

フォルダの作成ができたら、コマンドプロンプトやターミナルを開いて、

作成したフォルダまで移動します。

移動が出来たら、下記のコマンドを入力して実行します。

npx create-react-app sample --template typescript

「sample」はプロジェクト名になるので好きな名前でOKです(ただし、1文字目は小文字にします)

プロジェクトの実行

Reactのプロジェクトが出来たら、次はプロジェクトのフォルダへ移動します。

cd sample

移動が出来たら、下記コマンドでVisualStudioCodeを起動します。

code .

VisualStudioCodeが開いたら、画面上部の「ターミナル」→「新しいターミナル」をクリックします。

そうすると、画面下部にターミナルが出てくるので、そこで下記のコマンドでプロジェクトを実行します。

npm run start

これで準備は完了です。

値の受け渡し

ここから実際にコードを書いていきます。

が、まずは最初から作成されているApp.tsxをきれいにしましょう!

import React from 'react';
import './App.css';

function App() {
  return (
    <div className="App">
    </div>
  );
}

export default App;

子コンポーネントの作成

ここで子コンポーネントを、srcフォルダの配下に「Child.tsx」を作成します。

今回は、分かりやすいようにsrcフォルダは以下に子コンポーネントを作成していますが、業務などのプロジェクトでは、更にフォルダを作り、そこに作成します。

type Props = {
  message: string
}

export default function Child(props: Props): JSX.Element {
  return (
    <div>
      {props.message}
    </div>
  )
};

上記のコードを解説します。

まずは、5行目のように関数コンポーネントを作成します。

この関数の中でPropsという型の引数を設定します。

そして、1~3行目のようにPropsという型の定義をします。

そうすることで、親コンポーネント(呼び出し元)からデータを受け取る準備ができます。

1~3行目はTypeScriptの型エイリアスという機能になります。

良ければ、下記の記事も参考にしてみてください。

そして、最後にpropsという変数(型はProps)を呼び出して画面に表示します。(8行目)

.(ドット)でPropsの持つプロパティにアクセスすることができます。

これで、子コンポーネントの作成が完了しました。

親コンポーネントから子コンポーネントの呼び出し

後は、親から子を呼び出すだけです。

8行目をApp.tsxに追記します。

import React from 'react';
import './App.css';
import Child from './Child';

function App() {
  return (
    <div className="App">
      <Child message={'子コンポーネントへ値の受け渡し'} />
    </div>
  );
}

export default App;

注意するポイントとしては、

今回のように呼び出したいコンポーネントが引数を持っている場合は、

親(今回はApp.tsx)で、指定されている引数の型を属性に追加する必要があります。

つまり、下記のような場合には2つの属性を追加することになります。

type Props = {
  name: string
  age: number
}
export defalut function Child(props: Props) {
}
import React from 'react';
import './App.css';
import Child from './Child';

function App() {
  return (
    <div className="App">
      <Child name={'test'} age={20} />
    </div>
  );
}

export default App;

<レベルアップ>汎用的なPropsの使い方

Reactのコンポーネントは、基本的には汎用的に使用されるものになるので、

Props(引き渡すデータ)も汎用的であるべきです。

その場合、呼び出したい場面によって引き渡すデータの中には必要のないものも存在します。

そういった場面で役に立つのがTypeScriptの型エイリアスです。

下記のように定義すると、コンポーネントを呼び出す際に必要、不要の制御が可能になります。

type Props = {
  name: string
  age?: number
}

3行目の「age」の後ろに「?」が付いています。

このようにプロパティの後ろに「?」を付けることで呼び出す際にage属性の設定は不要(追加しても良い)になります。

// ageが不要な場合
<Child name={'test'} />

// ageが必要な場合
<Child name={'test'} age={30} />

最後に

値の受け渡しは、最初はデータの流れが分からずに難しいと感じますが、慣れてしまうと簡単です。

データの流れを意識しながら反復練習することをお勧めします。

また、TypeScriptを使うと便利さは爆上がりなので、どんどんチャレンジしてみてください!

コメント

タイトルとURLをコピーしました