Next.js構築 その⑨

Next.js-1.構築編-

propsを使ってデータを渡そう

今回はコンポーネント間でデータを受け渡す方法について見ていきます。

Propsとは

props(プロップス)は、親コンポーネントから子コンポーネントへデータを渡す仕組みです。

  • 親から子へ一方向に渡されるデータで、子コンポーネント側でデータを受け取って利用します。
  • propsの値は子コンポーネント内で変更できない(読み取り専用)。

使い方

では実際に動きを見ていきます。

まずはapp/componentsフォルダに「props.js」ファイルを作成します。

次にpropsを受け取る子コンポーネントを定義します。

ここでは「content」というデータを受け取れるようにしています。

export default function Props(props) {
    return <h1>{props.content}</h1>;
}

次にapp/page.jsでこのPropsコンポーネントを呼び出します。その際渡したいデータを定義します。

import Props from "./components/props";
<Props content="これはpropsで渡ってきたデータです。" />

表示できました。

孫コンポーネントへのデータ継承

次に、親から子、子からさらに孫コンポーネントにデータを継承してみましょう。

まず、app/componentsフォルダに「offSpring」フォルダを作成し、grandChild.jsを作成しGrandChildコンポーネントを定義します。

ここでは「title」というデータを受け取れるようにしています。

export default function GrandChild(props) {
    return <h1>{props.title}</h1>;
}

次にapp/componentフォルダにchild.jsを作成し、Childコンポーネントを定義します。

import GrandChild from "./offspring/grandChild";

export default function Child(props) {
    return (
        <GrandChild title={props.title} />
    );
}

最後にapp/page.jsでChildコンポーネントを読み込み、データを渡します。

import Child from "./components/child";
<Child title="これはpropsで渡ってきたtitleです。" />

表示されました。

どのような状況で使うのか?

propsでデータを渡す方法を説明してきましたが、具体的にどういった状況で使用するかをまとめました。

  1. 再利用可能なコンポーネントを作りたいとき
  2. 親から子にデータやロジックを渡したいとき
  3. 動的なデータを扱いたいとき
  4. スタイルや設定を動的に変えたいとき

いまいちピンとこないかもしれませんが、今はこういうことがある、という風に気に留めておいてもらえばOKです。

複数のデータを渡す場合

これまで渡すデータは1つでしたが、複数ある場合も見ていきましょう

まずはapp/components/offspringフォルダに「multipleGC.js」を作成し、MultipleGCコンポーネントを定義します。ここではpropA,propB,propCを受け取れます。

export default function MultipleGc(props) {
    return (
        <>
            <p>{props.propA}</p>
            <p>{props.propB}</p>
            <p>{props.propC}</p>
        </>
    );
}

次にapp/componentsに「multipleCilld.js」を作成しMultipleChildコンポーネントを定義します。

import MultipleGc from "./offspring/multipleGC";

export default function MultipleChild(props) {
    return (
        <MultipleGc propA={props.propA} propB={props.propB} propC={props.propC} />
    );
}

最後にapp/pages.jsでMultipleChildコンポーネントを読み込んで、データを渡します。

import MultipleChild from "./components/multipleChild";
<MultipleChild propA="データA" propB="データB" propC="データC" />

表示できました。

ただ、上記のやり方だと

propA="..." propB="..." propC="..." 

という記述が2回出てきており、コードとしては冗長といえます。

これを回避する方法はいくつかありますが、そのうちの一つである

スプレッド構文

について次回見ていきます。

コメント

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