Remixではじめる
パッケージをインストールする
まず、アプリケーションを作成します。
ターミナルで次のコマンドのいずれかを実行します。
pnpm create remix my-app --typescript
Yamada UIは、@yamada-ui/reactをインストールするだけで、ほとんどのコンポーネントやフックを使用できます。
pnpm add @yamada-ui/react
テーブル・カレンダー・カルーセルなど使用する場合は、別途インストールをする必要があります。
pnpm add @yamada-ui/table
| パッケージ | 説明 | |
|---|---|---|
| @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-markdownとreact-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>)}
デフォルトのテーマは、UIProviderのなかに含まれています。
テーマやコンフィグをカスタマイズしたい場合は、テーマをカスタマイズするとコンフィグをカスタマイズするをご覧ください。
ColorModeScriptを追加する
カラーモードを正常に動作させるために、body内にColorModeScriptを追加する必要があります。
理由は、カラーモードがlocalStorageやcookiesを用いて実装されており、ページの読み込み時に同期を正しく機能させるためです。
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>)}
propsのinitialColorModeは、コンフィグと同じinitialColorModeを渡してください。もし、あなたのコンフィグがある場合は、そちらのinitialColorModeを渡してください。
colorModeManagerを追加する
Remixなどのサーバー側でレンダリングされるサイトの場合は、カラーモードがハイドレーション中に変更することを避けるために、リクエストにカラーモードを含めたい場合があります。
サーバーサイドレンダリングを使用しない場合は、こちら手順をする必要はありません。Yamada UIは、デフォルトでlocalStorageを使用しています。
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><ColorModeScripttype="cookie"nonce="testing"initialColorMode={defaultConfig.initialColorMode}/><UIProvider><Outlet /></UIProvider><ScrollRestoration /><Scripts /><LiveReload /></body></html>)}
colorModeManagerにcookiesを設定する
createColorModeManagerにssrとcookiesを設定します。
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><ColorModeScripttype="cookie"nonce="testing"initialColorMode={defaultConfig.initialColorMode}/><UIProvider colorModeManager={colorModeManager}><Outlet /></UIProvider><ScrollRestoration /><Scripts /><LiveReload /></body></html>)}
コンポーネントを使用する
UIProviderを追加したら、アプリケーション内でコンポーネントを呼び出します。
route.tsx
import { Button } from "@yamada-ui/react"export default function Home() {return <Button>Click me!</Button>}
GitHubでこのページを編集する

