作成したTheme Switcher
画像のようなTheme Switcherを作成しました。shadcn/uiのToggle Groupとnext-themesを使って、最小限のスタイル調整でNext.jsの公式サイトで使われているものと同じような見た目を再現しています。
次のコードをNext.jsで使ってみてください。
Theme Switcherのコード
src/components/theme-switcher.tsx
'use client'
import { ComputerIcon, MoonIcon, SunIcon } from 'lucide-react'
import { useTheme } from 'next-themes'
import { useEffect, useState } from 'react'
import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'
export default function ThemeSwitcher() {
const [mounted, setMounted] = useState(false)
const { theme, setTheme } = useTheme()
useEffect(() => {
setMounted(true)
}, [])
if (!mounted || theme === undefined) {
return
}
return (
<ToggleGroup
className='rounded-full border p-1'
size='sm'
type='single'
value={theme}
onValueChange={(value) => setTheme(value)}
>
<ToggleGroupItem className='rounded-full' value='dark' aria-label='Toggle dark'>
<MoonIcon size={16} />
</ToggleGroupItem>
<ToggleGroupItem className='rounded-full' value='system' aria-label='Toggle system'>
<ComputerIcon size={16} />
</ToggleGroupItem>
<ToggleGroupItem className='rounded-full' value='light' aria-label='Toggle light'>
<SunIcon size={16} />
</ToggleGroupItem>
</ToggleGroup>
)
}
ThemeSwitcherを使用する方法
上記のThemeSwitcherを使用するためには、次のドキュメントの通りに必要なパッケージを追加していく必要があります。
-
shadcn/uiをインストール
Next.jsInstall and configure Next.js.shadcn.com -
ダークモードの設定
Next.jsAdding dark mode to your next app.shadcn.com -
Toggle Groupを追加
Terminalpnpm dlx shadcn-ui@latest add toggle-group