第3章:React 18 の新機能

2024年2月26日

今回は、React 18 の新機能について詳しく見ていきましょう。React 18 では、開発者の生産性を向上させ、アプリケーションのパフォーマンスを最適化するための多くの新機能が追加されました。具体的には、並行処理機能、自動バッチ処理、Suspense を用いたデータ取得、サーバーコンポーネントの機能が含まれています。それでは、これらの機能を一つずつ深掘りしていきましょう。

3.1 並行処理機能

React 18 では、最も注目すべき新機能の一つが並行レンダリングです。この機能により、React は複数のレンダリングを同時に処理できるようになり、アプリケーションの応答性を向上させることが可能です。

特に、useTransition フックを使用することで、ユーザーインターフェースの変更をスムーズに処理できます。例えば、次のように使います:

import React, { useState, useTransition } from 'react';

function App() {
    const [isPending, startTransition] = useTransition();
    const [inputValue, setInputValue] = useState('');

    const handleChange = (e) => {
        startTransition(() => {
            setInputValue(e.target.value);
        });
    };

    return (
        <div>
            <input type="text" onChange={handleChange} />
            {isPending ? <p>Loading...</p> : <p>{inputValue}</p>}
        </div>
    );
}

このようにして、重たい処理をバックグラウンドで実行することで、ユーザーはアプリケーションの応答性を感じながら作業を続けることができます。

3.2 自動バッチ処理

次に、自動バッチ処理の機能について説明します。React 18 からは、状態の変更を自動的にバッチ処理することが可能になりました。これにより、パフォーマンスが向上し、アプリケーションのレスポンスも早くなります。

例えば、以下のようなコードを考えてみましょう:

function App() {
    const [count, setCount] = useState(0);
    const [text, setText] = useState('');

    const handleClick = () => {
        setCount(c => c + 1);
        setText('Updated!');
    };

    return (
        <div>
            <button onClick={handleClick}>Update</button>
            <p>Count: {count}</p>
            <p>{text}</p>
        </div>
    );
}

React 18 では、この handleClick 関数が複数の状態更新を自動的にバッチ処理し、一度の再レンダリングで済むようになります。これにより、性能が向上し、無駄なレンダリングを避けられるのです。

3.3 Suspenseによるデータ取得

React 18 では、Suspense コンポーネントを利用して、データ取得の際の UI コンポーネントの遅延読み込みが可能になりました。これにより、コードの可読性が向上し、よりシンプルにデータの取得を管理できます。

以下は、React.lazy を使った例です:

import React, { Suspense, lazy } from 'react';

const LazyComponent = lazy(() => import('./LazyComponent'));

function App() {
    return (
        <div>
            <Suspense fallback={<div>Loading...</div>}>
                <LazyComponent />
            </Suspense>
        </div>
    );
}

このように、Suspense を使うことで、遅延読み込み中に指定したフォールバック UI を表示できます。これは、特に大規模なアプリケーションにおいて便利な機能です。

3.4 サーバーコンポーネント

最後に、React 18 では新たにサーバーコンポーネントが導入されています。サーバーコンポーネントを使用することで、クライアント側の負担を軽減し、初期描画速度を向上させることができます。

サーバーコンポーネントは、サーバーでのみ実行され、クライアントに送信されるバイト数を減らします。これにより、データの取得や処理をサーバー側で行うことができ、クライアント側は軽量化されます。

以下は、サーバーコンポーネントの基本的な例です:

// サーバーコンポーネント
export default async function ServerComponent() {
    const data = await fetchData(); // データ取得処理
    return <div>{data}</div>;
}

これにより、アプリケーションはよりスムーズに動作し、ユーザーに快適な体験を提供できます。


以上が React 18 の新機能についての解説でした。これらの新機能を理解し、活用することで、より効率的でパフォーマンスの高いアプリケーションを構築できるようになります。次の章では、状態管理とデータフローに関する内容をご紹介いたしますので、お楽しみに!