Yamada UIにスターをあげる

スター
Yamada UIYamada UIv1.7.2

Remixではじめる

パッケージをインストールする

まず、アプリケーションを作成します。

ターミナルで次のコマンドのいずれかを実行します。

pnpm create remix my-app --typescript
Copied!

Yamada UIは、@yamada-ui/reactをインストールするだけで、ほとんどのコンポーネントやフックを使用できます。

pnpm add @yamada-ui/react
Copied!

テーブル・カレンダー・カルーセルなど使用する場合は、別途インストールをする必要があります。

pnpm add @yamada-ui/table
Copied!
パッケージ説明
@yamada-ui/table

@tanstack/react-tableを使用した、便利なテーブルコンポーネントを提供します。

@yamada-ui/calendar

dayjsを使用した、便利なカレンダーとデイトピッカーコンポーネントを提供します。

@yamada-ui/carousel

embla-carousel-reactを使用した、便利なカルーセルコンポーネントを提供します。

@yamada-ui/dropzone

react-dropzoneを使用した、便利なドロップゾーンコンポーネントを提供します。

@yamada-ui/charts

rechartsを使用した、便利なチャートコンポーネントを提供します。

@yamada-ui/markdown

react-markdownreact-syntax-highlighterを使用した、便利なマークダウンコンポーネントを提供します。

@yamada-ui/fontawesome

Font Awesomeを便利に使用するためのコンポーネントを提供します。

UIProviderを追加する

Yamada UIをインストール後、UIProviderを追加します。

root.tsx

import { cssBundleHref } from "@remix-run/css-bundle"
import type { LinksFunction } from "@remix-run/node"
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
} from "@remix-run/react"
import { UIProvider } from "@yamada-ui/react"
export const links: LinksFunction = () => [
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
]
export default function App() {
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<UIProvider>
<Outlet />
</UIProvider>
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
)
}
Copied!

ColorModeScriptを追加する

カラーモードを正常に動作させるために、body内にColorModeScriptを追加する必要があります。

理由は、カラーモードがlocalStoragecookiesを用いて実装されており、ページの読み込み時に同期を正しく機能させるためです。

root.tsx

import { cssBundleHref } from "@remix-run/css-bundle"
import type { LinksFunction } from "@remix-run/node"
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
} from "@remix-run/react"
import { UIProvider } from "@yamada-ui/react"
import { ColorModeScript, defaultConfig } from "@yamada-ui/react"
export const links: LinksFunction = () => [
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
]
export default function App() {
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<ColorModeScript initialColorMode={defaultConfig.initialColorMode} />
<UIProvider>
<Outlet />
</UIProvider>
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
)
}
Copied!

colorModeManagerを追加する

Remixなどのサーバー側でレンダリングされるサイトの場合は、カラーモードがハイドレーション中に変更することを避けるために、リクエストにカラーモードを含めたい場合があります。

cookiesを取得する

cookiesを取得する場合は、useLoaderDataを使用しています。

root.tsx

import { cssBundleHref } from "@remix-run/css-bundle"
import type { LinksFunction } from "@remix-run/node"
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
useLoaderData,
} from "@remix-run/react"
import { UIProvider } from "@yamada-ui/react"
import { ColorModeScript, defaultConfig } from "@yamada-ui/react"
import { json, LoaderFunction } from "@remix-run/node"
export const loader: LoaderFunction = async ({ request }) => {
const cookies = request.headers.get("Cookie")
return json({ cookies })
}
export const links: LinksFunction = () => [
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
]
export default function App() {
const { cookies } = useLoaderData<{ cookies: string }>()
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<ColorModeScript
type="cookie"
nonce="testing"
initialColorMode={defaultConfig.initialColorMode}
/>
<UIProvider>
<Outlet />
</UIProvider>
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
)
}
Copied!

colorModeManagercookiesを設定する

createColorModeManagerssrcookiesを設定します。

root.tsx

import { cssBundleHref } from "@remix-run/css-bundle"
import type { LinksFunction } from "@remix-run/node"
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
useLoaderData,
} from "@remix-run/react"
import { UIProvider, createColorModeManager } from "@yamada-ui/react"
import { ColorModeScript, defaultConfig } from "@yamada-ui/react"
import { json, LoaderFunction } from "@remix-run/node"
export const loader: LoaderFunction = async ({ request }) => {
const cookies = request.headers.get("Cookie")
return json({ cookies })
}
export const links: LinksFunction = () => [
...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []),
]
export default function App() {
const { cookies } = useLoaderData<{ cookies: string }>()
const colorModeManager = createColorModeManager("ssr", cookies)
return (
<html lang="en">
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<Meta />
<Links />
</head>
<body>
<ColorModeScript
type="cookie"
nonce="testing"
initialColorMode={defaultConfig.initialColorMode}
/>
<UIProvider colorModeManager={colorModeManager}>
<Outlet />
</UIProvider>
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
)
}
Copied!

コンポーネントを使用する

UIProviderを追加したら、アプリケーション内でコンポーネントを呼び出します。

route.tsx

import { Button } from "@yamada-ui/react"
export default function Home() {
return <Button>Click me!</Button>
}
Copied!

GitHubでこのページを編集する

ViteGatsby