LoginSignup
7
0

More than 1 year has passed since last update.

【React18】Suspenseの活用とReactのSSR進化

Last updated at Posted at 2022-12-23

みなさんReact18での機能を活用してみたりはしましたでしょうか?

私もまだ業務ではこの素晴らしいアップデートの恩恵を受けているとは言えないのですが、自己学習の際に色々遊んでいる次第です。

そこで今回はReact18の新しい機能、Suspenseに関して綴ってみます。

Suspenseに関してまとめると

今まで多くの反復作業を作り出したローディングロジック。

この作業を簡潔化するために、React18はLoading Stateデータの塊をコンポーネントの外部に移動して呼び出すようにしました。

つまりは、コンポーネント内のデータを呼び出している間に、ユーザーが真っ白な画面を見ないようにする。そのため、そのコンポーネントを包むSuspenseがデータを全て呼び出す間レンダリングして、呼び出しが完了した際に完成されたコンポーネントを画面に出力する。

簡単に説明すると、つまりはこういうことです。

では実際にコードを見ていきましょう。

外部コンポーネントにてインポート

スクリーンショット 2022-12-23 14.59.42.png

今までのコード(こう見るとだいぶ簡潔化されている)

スクリーンショット 2022-12-23 14.59.48.png

影響範囲もすぐに把握できて、データフローを素早く確認でき、非常に良いコードになってしまった。

SSR方式も画期的に便利で扱いやすくなった。

参考、webローディング方式(SSR、CSR、SSG)

ユーザーが空の画面が見えないようにSuspenseを適材適所に使用してみましょう。

スクリーンショット 2022-12-23 15.06.37.png
※韓国語含んでてすみません。<작은데이터 />=小さいデータ。<큰데이터 />=大きデータ。という意味です。

ここで比較的呼び出しやすい小さいデータのコンポーネントは、すでに画面に見えている状態です。

Suspenseで包まれた<大きいデータ />コンポーネントが、サーバーサイドでローディングされている間、クライアント側のHTMLページは

<Suspense fallback={<Loader />}>

呼び出されたHTMLコード ex) <img src="loading.gif">
を保持し、ローディングが完了した瞬間、そこに
コンポーネントでローディングしたHTMLコード ex) <ul class="big-list">...</ul>
が代わりに画面に表示される。

このように各コンポーネントがレンダリングされるとき、hydrate(jsファイルまでブラウザにレンダリングされインタラクティブ状態)されていないReactコンポーネントをユーザーがクリックすると、ユーザーが望む動作をコンポーネントが優先的に機能させる。

非常に高速なレンダリングと使いやすさを保証してくれています。

次に期待されるのがServer Componentsの本格的な展開です。

バックエンドにあるReact.JSコードをブラウザがレンダリングするか(CSR)サーバがレンダリング(SSR)するかコンポーネントを選択的にレンダリングします。

つまり、コンポーネントのレンダリングをサーバーで行う場合、レンダリング結果の値だけユーザーに送信し、重いjsデータをユーザーが直接ダウンロードしなくても利用できるようにすることで、ロード時間が短縮され、UXの満足度を上げることができるようになりました。

また、基本方式がセキュリティに脆弱な方面レンダリング値のみを受け取るため、セキュリティに強く、使いやすさも直感的で簡単です。

  • file.server.js -> Server Component
  • file.client.js -> Client Component
  • file.js -> Universal Component

ぜひみなさん遊んでみてください。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0