React 19が2024年12月にリリースされ、いくつかの重要な機能が追加されました。今回は主要な変更点についてまとめていきます。
React 19の最大の目玉機能として、React Compilerが正式に導入されました。これまでuseMemo、useCallback、React.memoなどを使って手動で最適化していた部分を、コンパイラが自動的に処理してくれるようになりました。
// 以前のコード
const ExpensiveComponent = React.memo(({ data }) => {
const processedData = useMemo(() => processData(data), [data]);
return <div>{processedData}</div>;
});
// React 19では自動最適化される
const ExpensiveComponent = ({ data }) => {
const processedData = processData(data);
return <div>{processedData}</div>;
};
フォーム処理が大幅に簡素化されました。新しいaction属性を使うことで、非同期処理を含むフォーム送信が簡単に実装できるようになりました。
function ContactForm() {
async function submitForm(formData) {
await fetch('/api/contact', {
method: 'POST',
body: formData
});
}
return (
<form action={submitForm}>
<input name="email" type="email" />
<button type="submit">送信</button>
</form>
);
}
useActionStateフックも追加され、送信状態の管理がより簡単になりました。
新しいuse() APIにより、PromiseやContextの値を同期的に取得できるようになりました。これはReactで初めて条件分岐内でも使用可能なフックです。
function Article({ id }) {
const article = use(fetchArticle(id));
return (
<article>
<h1>{article.title}</h1>
<p>{article.content}</p>
</article>
);
}
<title>
、<meta>
、<link>
タグをコンポーネント内で直接使用できるようになりました。これまでreact-helmetなどのライブラリが必要だった処理が、標準機能として利用可能になりました。
function BlogPost({ post }) {
return (
<>
<title>{post.title} | My Blog</title>
<meta name="description" content={post.excerpt} />
<article>
<h1>{post.title}</h1>
<p>{post.content}</p>
</article>
</>
);
}
refを特別な属性として扱う必要がなくなり、通常のpropとして渡せるようになりました。forwardRefは不要になります。
// 以前のコード
const MyInput = React.forwardRef((props, ref) => {
return <input ref={ref} {...props} />;
});
// React 19
function MyInput({ ref, ...props }) {
return <input ref={ref} {...props} />;
}
React 19は開発者体験を大幅に向上させる多くの機能を導入しました。特にReact Compilerによる自動最適化とActionsによるフォーム処理の簡素化は、日々の開発効率を大きく改善してくれそうです。
既存のプロジェクトも段階的に移行できるよう設計されているため、まずは新機能を試してみることから始めてみてはいかがでしょうか。