0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【React】関数コンポーネントで親のstateを子にpropsとして渡す方法

Posted at

はじめに

Reactで関数コンポーネントを使い、親のstateを子にpropsとして渡す方法(stateのリフトアップ)についてまとめました。

この記事では、1回クリックするとテキストがbananaからappleに変更されるボタンを作成します。
説明用に極力シンプルなコードにしています。
ご自身のコードに置き換えて頂いて、ご参考になればと思います。
また、この記事の内容に不備が御座いましたらご指摘頂けますと幸いです。

何の為に親のstateを子にpropsとして渡すのか

複数の子コンポーネントからデータを集めたり、コンポーネント同士を互いにやりとりさせる為には、
親コンポーネント内で共有のstateを宣言する必要があります。

環境

React:17.0.2
node.jsとnpmがインストールされていることが前提です。

準備

npx create-react-app my-app
cd my-app
npm start

ターミナルの新しいウィンドウを開き、以下のコマンドを実行して必要なディレクトリとファイルを作成します。

mkdir src/components
touch src/components/{Fruits.jsx,FruitsButton.jsx}

実装

まずは、stateのリフトアップをしないで書いてみます。

{/* Fruits.jsx */}

import React, { useState } from "react";

const Fruits = () => {
  const [fruit, setFruit] = useState("banana");
  return <button onClick={() => setFruit("apple")}>{fruit}</button>;
};

export default Fruits;
{/* App.js */}


import "./App.css";
import Fruits from "./components/Fruits"; {/* 追加 */}

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <Fruits /> {/* 追加 */}
      </header>
    </div>
  );
}

export default App;

stateのリフトアップをするとこうなります。

{/* Fruits.jsx(親コンポーネント) */}

import React, { useState } from "react";
import FruitsButton from "./FruitsButton";

const Fruits = () => {
  const [fruit, setFruit] = useState("banana");
{/* 状態を"apple"に変える関数を定義*/}
  const ReplaceFruit = () => {
    setFruit("apple");
  };
  {/* propsとして子に渡すのは{fruit} は(現在の状態"banana")とReplaceFruit関数 */}
  return <FruitsButton fruit={fruit} onClick={ReplaceFruit} />;
};

export default Fruits;

{/* FruitsButton.jsx(子コンポーネント) */}

const FruitsButton = (props) => {
  return <button onClick={() => props.onClick()}>{props.fruit}</button>;
};

export default FruitsButton;


既に"apple"になっている方は一度ブラウザをリロードして下さい。

参考にしたサイト

ステートフックの利用法 – React
https://ja.reactjs.org/docs/hooks-state.html
06 新・日本一わかりやすいReact入門【基礎編】コンポーネントの状態管理
https://youtu.be/dTghhYtvPek

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?