bff

フルスタックエンジニアを目指して学んだことなどを記録しています

Reactでのpropsの利用法

Reactのチュートリアルをする中で、propsの挙動を理解するために調べました。

propsの使い方

propsはComponent間でのデータの受け渡しに利用されます。 renderの中で受け渡し先のComponent(以下の例ではChild)にPropertyを設定すると、this.propsからアクセスできます。これによりデータの受け渡しが実現できます。

class Parent extends React.Component {
  render() {
    const a = 10;
    const b = 20;
    return <Child p1={a} p2={b}/> // ここでPropertyを設定
  }
}

class Child extends React.Component {
  render() {
    return <div><div>p1:{this.props.p1}</div> // ここでpropからアクセス可能
      <div>p2:{this.props.p2}</div></div>;
  }
}

表示結果 p1:10 p2:20

チュートリアルのコードの中で、最初見たときに理解できなかったのは次のコードでした。 コンポーネントの構造としては、Game > Board > Squareという形で組み立てられています。 挙動としては、SquareをクリックするとGameの中に定義されているhandleClickが呼ばれるというものです。 * コード抜粋1

// Boardコンポーネントの中の処理
renderSquare(i) {
  return <Square
      value={this.props.squares[i]}
      onClick={() => this.props.onClick(i)}
    />;
}
  • コード抜粋2
// GameコンポーネントにおけるBoardの呼び出し処理
<Board
  squares={current.squares}
  onClick={(i) => this.handleClick(i)}
/>

コード抜粋1の部分ではSquareのonClickが呼ばれると、BoardのpropsのonClickが呼ばれるようになっています。 そして、コード抜粋2の部分で、Boardのpropertyとしてthis(ここではGame)のhandleClickが呼ばれるようになっています。

通常は呼び出し元Component(Game)から呼び出し先のComponent(Square)に値を渡すときに使います。 しかし、この例では呼び出し元側でpropsに関数をバインドし、その関数の引数を呼び出し先で設定することで、呼び出し先(Square)の値を呼び出し元(Game)に伝えています。 Reactではこのようにpropsを活用してComponent間のデータ連携を実現するようです。