4
1

Nextjsでshadcn/uiを使ってtoasterを表示

Last updated at Posted at 2024-05-21

結論

すぐ使えるようなのを期待しているなら、shadcn/uiのsonnarを使おう。

1. はじめに

shadcn/ui とは何か

shadcn/uiとは、tailwindcssを使って、構成されたヘッドレスUIです。

componentsが用意されていますが、カスタムしたい場合は、tailwindcssのclassを与えてカスタムします。

2. 前提条件

今回はNextjsで使うので、Nextjsのセットアップに沿っています。

3. toaster(sonner)のセットアップ

shadcn/uiのcomponentsににtoasterが用意されていますが、より使いやすく準備されているsonnerの方を使います。

3.1 CLIでコンポーネント追加

npx shadcn-ui@latest add sonner

3.2 Layout.tsxにコンポーネント追加

richColorsを使うと、自分で色(successやfailedの時に色分け)を設定しなくてもOKです。

layout.tsx
+ import { Toaster } from "@/components/ui/sonner"

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <head />
      <body>
        <main>{children}</main>
+        <Toaster richColors />
      </body>
    </html>
  )
}

sonnarとtoasterの比較

shadcn/uiのtoasterは、一から見た目やメソッドを用意する人向けです。
sonnarは、すぐ使いやすい形から準備ほぼなしで使えます。

sonnarの場合

info

sonnar.ts
import { Toaster, toast } from 'sonner'

function App() {
  return (
    <div>
      <Toaster />
      <button onClick={() => toast.info('お気に入りを更新しました')}>
        Show toast
      </button>
    </div>
  )
}

スクリーンショット 2024-05-21 20.08.54.png

success

sonnar.ts
import { Toaster, toast } from 'sonner'

function App() {
  return (
    <div>
      <Toaster />
      <button onClick={() => toast.success("お気に入り追加しました")}>
        Show toast
      </button>
    </div>
  )
}

スクリーンショット 2024-05-21 20.13.15.png

error

sonnar.ts
import { Toaster, toast } from 'sonner'

function App() {
  return (
    <div>
      <Toaster />
      <button onClick={() => toast.error("お気に入り削除しました");}>
        Show toast
      </button>
    </div>
  )
}

スクリーンショット 2024-05-21 20.14.11.png

toasterの場合

例えば、shadcn/uiのtoasterはuseToastをimportし、見た目が薄ーくしか用意されてません

toaster.ts
import { useToast } from "@/components/ui/use-toast"

export const ToastDemo = () => {
  const { toast } = useToast()

  return (
    <Button
      onClick={() => {
        toast({
          description: "your message has been sent.",
        })
      }}
    >
      Show Toast
    </Button>
  )
}

スクリーンショット 2024-05-21 19.51.04.png

failed な toaster

variant: "destructive"を追加します。

toaster.ts
"use client"

import { Button } from "@/components/ui/button"
import { ToastAction } from "@/components/ui/toast"
import { useToast } from "@/components/ui/use-toast"

export function ToastDestructive() {
  const { toast } = useToast()

  return (
    <Button
      variant="outline"
      onClick={() => {
        toast({
          variant: "destructive",
          title: "Uh oh! Something went wrong.",
          description: "There was a problem with your request.",
          action: <ToastAction altText="Try again">Try again</ToastAction>,
        })
      }}
    >
      Show Toast
    </Button>
  )
}

スクリーンショット 2024-05-21 19.51.16.png

success な toaster

用意されていないので、自分で追加する必要があります。

まとめ

  • すぐ使える形で使うなら、sonnarを使う
  • 1からカスタマイズしたい、sonnarの見た目を差別化したいであれば、toasterを使う

参考リンク

4
1
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
4
1