React で Component クラスを使う

Function を使った方法はよく紹介されていますが、あまり React.Component クラスを使う方法は紹介されていないので、備忘録として残しておきます。

Component クラスの拡張

Component クラスを使って React を実装する場合は、必ず拡張して使用します。そして、状態は state プロパティ、state の変更用に setState メソッド、描画用に render メソッドが用意されています。このうち、render メソッドを拡張クラスで提供する必要があります。

import { Component } from "react";
import { initialDatas } from "./initilaDatas";

export class ComponentEx extends Component {
  constructor(props) {
    super(props);
    this.state = [];
    this.datas = datas;
  }

  handle(id: string) {
    if (this.state.checked.includes(id)) {
      const checked = this.state.checked.filter((item) => item.id !== id);
      setState({ checked });
    } else {
      this.state.checked.push(id);
      setState(this.state);
    }
  }

  render() {
    return (
      <div>
        {
          this.datas.map((item) => { return (
            <div>
              <input type="checkbox" onClick={() => this.handle(item.id)} checked={this.state.checked.includes(item.id)} />
              {item.title} 
            </div>
          )});
        }
      </div>
    );
  }
}
type Data = {
  id: string,
  title: string
}
export datas: Data[] = [
  { id: "1", title: "オプション1" },
  { id: "2", title: "オプション2" },
];

函数呼び出しを使う場合

函数呼び出しを使う場合は useState メソッドを呼び出して現在値と変更メソッドを取得するのでした。

export function ComponentEx() {
  const [state, setState] = useState([]);
}

コンパクトに書けるという観点からは函数呼び出しに軍配が上がりそうです。

投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です