CSS-in-JS ライブラリの使用方法
警告: サーバーコンポーネントやストリーミングなどの新しいReact機能とCSS-in-JSを使用するには、ライブラリ作者がコンカレントレンダリングを含むReactの最新バージョンをサポートする必要があります。
以下はapp
ディレクトリ内のクライアントコンポーネントでサポートされているライブラリです(アルファベット順):
ant-design
chakra-ui
@fluentui/react-components
kuma-ui
@mui/material
@mui/joy
pandacss
styled-jsx
styled-components
stylex
tamagui
tss-react
vanilla-extract
現在サポート作業中のライブラリ:
豆知識: 私たちはさまざまなCSS-in-JSライブラリをテストしており、React 18機能や
app
ディレクトリをサポートするライブラリの例を追加していく予定です。
app
でのCSS-in-JS設定
CSS-in-JSの設定は以下の3つのステップからなるオプトインプロセスです:
- レンダリング中のすべてのCSSルールを収集するスタイルレジストリ
- スタイルを使用する可能性のあるコンテンツの前にルールを注入するための新しい
useServerInsertedHTML
フック - 初期サーバーサイドレンダリング中にアプリをスタイルレジストリでラップするクライアントコンポーネント
styled-jsx
クライアントコンポーネントでstyled-jsx
を使用するにはv5.1.0
以上が必要です。まず、新しいレジストリを作成します:
次に、ルートレイアウトをレジストリでラップします:
Styled Components
以下はstyled-components@6
以降の設定例です:
まず、next.config.js
でstyled-componentsを有効にします。
次に、styled-components
APIを使用して、レンダリング中に生成されたすべてのCSSスタイルルールを収集するグローバルレジストリコンポーネントと、それらのルールを返す関数を作成します。そして、useServerInsertedHTML
フックを使用して、レジストリに収集されたスタイルをルートレイアウトの<head>
HTMLタグに注入します。
ルートレイアウトのchildren
をスタイルレジストリコンポーネントでラップします:
豆知識:
- サーバーサイドレンダリング中、スタイルはグローバルレジストリに抽出され、HTMLの
<head>
にフラッシュされます。これにより、スタイルルールがそれらを使用する可能性のあるコンテンツより前に配置されます。将来的には、Reactの新機能を使用してスタイルを注入する場所を決定するかもしれません。- ストリーミング中、各チャンクからのスタイルが収集され、既存のスタイルに追加されます。クライアントサイドハイドレーションが完了すると、
styled-components
が通常通り引き継ぎ、さらに動的なスタイルを注入します。- スタイルレジストリのためにツリーの最上位でクライアントコンポーネントを使用するのは、この方法でCSSルールを抽出する方が効率的だからです。これにより、後続のサーバーレンダリングでスタイルを再生成する必要がなくなり、サーバーコンポーネントのペイロードで送信されることも防ぎます。
- styled-componentsのコンパイルの個々のプロパティを設定する必要がある高度なユースケースについては、Next.js styled-components APIリファレンスを参照してください。