
Reactコンポーネントには、クラスコンポーネントと関数コンポーネントという2つの主要な種類があります。
これらのコンポーネントは、コンポーネントの定義やライフサイクルメソッド、状態管理のアプローチなどにおいて異なる特徴を持っています。
クラスコンポーネント
クラスベース: クラス構文を使用してコンポーネントを定義します。
ライフサイクルメソッド: componentDidMount、componentDidUpdate、componentWillUnmount など、ライフサイクルメソッドを使用できます。
状態管理: this.stateおよびthis.setStateメソッドを使用して状態を管理します。
クラスメンバ: コンポーネントのメソッドはクラスのメンバであるため、thisキーワードを使用してアクセスします。
import React, { Component } from 'react';
class MyClassComponent extends Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
componentDidMount() {
// コンポーネントがマウントされた後の処理
}
handleClick() {
this.setState({ count: this.state.count + 1 });
}
render() {
return (
<div>
<p>Count: {this.state.count}</p>
<button onClick={() => this.handleClick()}>Increment</button>
</div>
);
}
}
関数コンポーネント
関数ベース: 関数構文を使用してコンポーネントを定義します。
フック: useState、useEffectなどのフックを使用して、ライフサイクルや状態管理などの機能を実現します。
状態管理: useStateフックを使用して状態を管理します。
クラスメンバではない: コンポーネントの関数はクラスメンバではないため、thisキーワードを使用せずにアクセスします。
import React, { useState, useEffect } from 'react';
function MyFunctionComponent() {
const [count, setCount] = useState(0);
useEffect(() => {
// コンポーネントがマウントされた後の処理
}, []);
const handleClick = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>Increment</button>
</div>
);
}
近年のReactでは、関数コンポーネントが強力であり、フックの導入によりクラスコンポーネントに似た機能を関数コンポーネントで利用できるようになっています。
関数コンポーネントが推奨されており、新しいコンポーネントの作成には関数コンポーネントとフックを使用することが一般的になっています。