コンポーネントのstate

コンポーネントにはprops以外にもstateと言う状態を持つ手段があります。

本講座ではstateless functionを基本としてコンポーネントを書くため、stateを使う機会は少ないことに加えて、最近ではredux等を使うとsingle storeでstateを管理することになり、コンポーネントレベルのstateは使わなくても済みます。

stateを使う場合

stateを使う方法を紹介します。いくつかの書き方がありますが、ES2015のclassを使う書き方を紹介します。

class Hello extends React.Component {
  constructor() {
    this.state = { count: 1 };
    this.incrementCount = this.incrementCount.bind(this);
  }
  incrementCount() {
    this.setState({ count: this.count + 1 });
  }
  render() {
    return (
      <div>
        Hello {this.props.name}
        <button onClick={this.incrementCount}>
          count={this.state.count}
        </button>
      </div>
    );
  }
}

react-compose-state

single storeを使う場合はコンポーネントレベルのstateを使うことは基本的にはありません。一方、個人プロジェクトなどの手軽なコーディングではsingle storeはオーバスペックである場合もあります。そのような場合でコンポーネントレベルのstateを使いつつ、上記のようなclassを使わない方法としてreact-compose-stateがあります。参考までにそれを使うと上記のコードは次のように書けます。

const Hello = composeWithState({ count: 1 })(({ name, count, setCount }) => (
  <div>
    Hello {name}
    <button onClick={() => setCount(count + 1)}>
      count={count}
    </button>
  </div>
);

results matching ""

    No results matching ""