🌊
Next.jsでライブラリ使用中にHydration Errorエラーが起きる時の対処法
追記
2025年9月23日(火)
該当のPRがマージされており、
react-selectを使用するコンポーネントをuse clientつけたら無事使えました。(next:15.5.0)
これを見る感じだとSSRはサポートされている様子。
SSR / Universal Rendering
React-Select uses Emotion for CSS which has zero-config server rendering. This means that all you need to do to server-render React-Select is call React's renderToString or use a framework like Next.js or Gatsby and it will work.
import { renderToString } from 'react-dom/server'
import App from './App'
const html = renderToString(<App />)
記事本文
Next.jsで開発しているとよく起こる Hydration Error。
そもそも通常のReactのライブラリはSSRを想定して作られていないので、
対応していないとハイドレーションエラーになることがあります。
今回は、Next.js環境下で、react-select
を使用時に、謎のエラーが発生しました。
PRは作成されているのですが、マージがされていない。。
selectboxはクライアントサイドだけで描画されてくれればいいので、
とりあえず以下のように dynamic import
で対応。
非同期のimportと描画が終わるまで、一瞬領域が空になってしまうので、
loading
にフォールバックの要素を設定してあげましょう。
selectbox.jsx
'use client'
import dynamic from 'next/dynamic'
const Select = dynamic(() => import('react-select'), {
ssr: false,
loading: () => <div className='flex h-full items-center'>...loading</div>,
})
export function SelectBox({ options, instanceId, ...props }) {
return (
<div className='h-[40px]'>
<Select
{...props}
options={options}
name={instanceId}
instanceId={instanceId}
/>
</div>
)
}
Discussion