Reactがフロントエンドのデファクトになったわけ
Reactは2013年にFacebook(現Meta)が公開して以来、コンポーネントベースのUI構築の標準となりました。宣言的UIと仮想DOMによる効率的な再レンダリングが特徴です。
コンポーネントの基本
// 関数コンポーネント(現在の主流)
interface ButtonProps {
label: string;
onClick: () => void;
variant?: 'primary' | 'secondary';
}
const Button: React.FC<ButtonProps> = ({ label, onClick, variant = 'primary' }) => {
return (
<button
className={`btn btn-${variant}`}
onClick={onClick}
>
{label}
</button>
);
};
主要Hooks
useState:状態管理
const [count, setCount] = useState(0);
const [user, setUser] = useState<User | null>(null);
// 状態更新は必ず関数を通す
setCount(prev => prev + 1);
useEffect:副作用処理
useEffect(() => {
// データフェッチ
fetch('/api/users')
.then(res => res.json())
.then(data => setUsers(data));
// クリーンアップ関数
return () => { /* アンマウント時の処理 */ };
}, [userId]); // 依存配列:userIdが変わるたびに実行
useCallback・useMemo:パフォーマンス最適化
// 関数のメモ化
const handleClick = useCallback(() => {
setCount(prev => prev + 1);
}, []);
// 計算値のメモ化
const sortedList = useMemo(() => {
return items.sort((a, b) => a.price - b.price);
}, [items]);
コンポーネント設計の原則
| 原則 | 内容 |
|---|---|
| 単一責任 | 1コンポーネント=1役割 |
| Props down | データは上から下へ |
| Events up | イベントは下から上へ |
| Smart/Dumb | ロジックとUIを分離 |
状態管理の選択
- ローカル状態:useState
- コンポーネント間共有:Context API
- 大規模アプリ:Zustand / Jotai(軽量) / Redux Toolkit(大規模)
ディレクトリ構成の例
src/
├── components/ # 再利用可能なUI部品
├── pages/ # ルートごとのページ
├── hooks/ # カスタムHooks
├── stores/ # 状態管理
├── types/ # TypeScript型定義
└── utils/ # 汎用ユーティリティ
Next.jsと組み合わせることでSSR・SSG・ファイルベースルーティングも活用できます。まず公式チュートリアルを完走することをおすすめします。




