【2026年版】React 19完全入門ガイド|新機能Actions・useOptimistic・Server Components実践解説

React 19は、Meta(旧Facebook)が開発するJavaScriptライブラリの最新バージョンです。2024年12月に正式リリースされたReact 19では、Server Components、Actions、新しいHooksなど革新的な機能が多数追加されました。本記事では、React 19の新機能と実践的な使い方を徹底解説します。

React 19の主要な新機能一覧

  • Server Components(安定版):サーバーサイドでレンダリングするコンポーネント
  • Actions:フォーム送信やデータ変更を簡素化する新機能
  • useFormStatus:フォームの送信状態を追跡する新Hook
  • useActionState:アクションの実行状態を管理する新Hook(旧useFormState)
  • useOptimistic:楽観的UIアップデートのための新Hook
  • use():Promiseを直接読み込める新Hook
  • ref as a prop:forwardRefが不要に。refを直接propsとして渡せるように
  • Document Metadata:titleタグ等をコンポーネント内に直接記述可能

React 19新機能の使い方:実践コード例

1. Actions – フォーム送信を簡素化

React 19のActionsにより、フォームのactionに非同期関数を直接渡せるようになりました。

// React 19 - Actionsを使ったフォーム送信
async function submitAction(formData) {
  'use server';
  const name = formData.get('name');
  const email = formData.get('email');
  await saveUserToDatabase({ name, email });
  redirect('/success');
}

function ContactForm() {
  return (
    
); }

2. useFormStatus – フォームの送信状態を管理

import { useFormStatus } from 'react-dom';

function SubmitButton() {
  const { pending, data, method } = useFormStatus();
  
  return (
    
  );
}

// 親コンポーネント内で使用
function MyForm() {
  return (
    
); }

3. useActionState – アクションの状態管理

import { useActionState } from 'react';

async function addToCart(prevState, formData) {
  const productId = formData.get('productId');
  const result = await addProductToCart(productId);
  if (result.success) {
    return { message: 'カートに追加しました!', error: null };
  }
  return { message: null, error: result.error };
}

function CartButton({ productId }) {
  const [state, dispatch, isPending] = useActionState(addToCart, {
    message: null,
    error: null
  });
  
  return (
    
{state.message &&

{state.message}

} {state.error &&

{state.error}

}
); }

4. useOptimistic – 楽観的UIアップデート

import { useOptimistic, useTransition } from 'react';

function MessageList({ messages }) {
  const [optimisticMessages, addOptimisticMessage] = useOptimistic(
    messages,
    (currentMessages, newMessage) => [
      ...currentMessages,
      { id: Date.now(), text: newMessage, sending: true }
    ]
  );
  
  const [isPending, startTransition] = useTransition();
  
  async function sendMessage(text) {
    addOptimisticMessage(text); // 即座にUIを更新
    await saveMessageToServer(text); // バックグラウンドで保存
  }
  
  return (
    
{optimisticMessages.map(msg => (
{msg.text} {msg.sending && (送信中...)}
))}
); }

5. ref as a prop – forwardRefが不要に

// React 19以前
const InputOld = forwardRef((props, ref) => (
  
));

// React 19以降 - refを直接propsとして受け取れる
function Input({ ref, ...props }) {
  return ;
}

// 使用例
function App() {
  const inputRef = useRef(null);
  return ;
}

6. Document Metadata – タイトル・メタタグをJSX内に記述

// React 19では、<meta>、<link>をどこにでも書ける
function BlogPost({ post }) {
  return (
    <article>
      <title>{post.title} - Tech Athletes
      
      
      
      

{post.title}

{post.content}

); }

React 18 vs React 19 比較表

機能React 18React 19
Server Componentsexperimental安定版
Actions(フォーム)未対応対応
useFormStatus未対応対応
useOptimisticexperimental安定版
ref as propforwardRef必須forwardRef不要
Document Metadata未対応対応
use() Hook未対応対応

React 19へのアップグレード方法

# npmを使う場合
npm install react@19 react-dom@19

# yarを使う場合
yarn add react@19 react-dom@19

# pnpmを使う場合
pnpm add react@19 react-dom@19

まとめ

React 19は、Server ComponentsやActionsなど、フロントエンド開発の生産性を大幅に向上させる機能を多数搭載しています。特にフォーム処理の簡素化や楽観的UIアップデートは、ユーザー体験の向上に直結します。Next.js 15との組み合わせで真価を発揮しますので、ぜひ最新バージョンへのアップグレードを検討してみてください。

投稿者 kasata

IT企業でエンジニアとして勤務後、テクノロジー情報メディア「Tech Athletes(テック・アスリート)」を運営。プログラミング、クラウドインフラ(AWS/GCP/Azure)、AI活用、Webサービス開発を専門とする。エンジニア・ビジネスパーソン向けに、実際に使ってみた経験をもとに信頼できる技術情報を発信中。資格:AWS認定ソリューションアーキテクト、Python 3 エンジニア認定試験合格。

コメントを残す

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