関数コンポーネント(Function Components)
- TypeScriptでは関数コンポーネントの型は
React.FunctionComponentインタフェースとして定義されている
-> エイリアスとして定義されているReact.FCを使用可能
./components/Hello.tsx
import * as React from 'react';
// Hello コンポーネントの定義
export const Hello: React.FC = () => {
return <h1>Hello</h1>
};
index.tsx
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Hello } from './components/Hello';
ReactDOM.render(<Hello />, document.getElementById('root'));
クラスコンポーネント(Class Components)
- TypeScriptでは
React.Componentを継承し、render()メソッドを実装する
./components/Hello.tsx
import * as React from 'react';
export class Hello extends React.Component<Props> {
public render(): JSX.Element {
return <h1>Hello</h1>
}
};
index.tsx
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { Hello } from './components/Hello';
ReactDOM.render(<Hello />, document.getElementById('root'));
関数コンポーネントとクラスコンポーネントの違い
state(状態管理)とLifecycle methodを使用可能か
| Hooks導入以前 | Hooks導入後 | |
|---|---|---|
| クラスコンポーネント | 使用可能 | 使用可能 |
| 関数コンポーネント | 使用不可 | 使用可能 |
関数コンポーネントとクラスコンポーネントのどちらを使用するべきか
結論
- 関数コンポーネントを推奨
理由
- コードを簡潔に書けるため
-
thisを使う必要がなくなる -
constructorrenderが不要になる
-
- 同一ロジックが混入しにくいため
- ライフサイクルメソッドに分割する必要がない