応用を学ぶ
このガイドでは、基本を学ぶで説明した概念や機能の応用を説明します。
テーマの応用
Yamada UIは、テーマのユーティリティが他のUIライブラリよりも豊富です。
基本を学ぶでは、テーマの継承にextendTheme
を使用することを学びました。ここでは、各コンポーネントで設定されているcolorScheme
を変更する方法やテーマに定義されているトークンの値を取得する方法を学びます。
各コンポーネントで設定されているcolorScheme
を変更するには、withDefaultColorScheme
を使用します。
他にも、サイズを変更するwithDefaultSize
、バリアントを変更するwithDefaultVariant
も提供しています。
withDefaultColorScheme
を使う
Yamada UIが提供しているほとんどのコンポーネントは、デフォルトのcolorScheme
にprimary
が設定されています。withDefaultColorScheme
を使用して、secondary
に変更します。
import { UIProvider, extendTheme } from "@yamada-ui/react"const customTheme = extendTheme(withDefaultColorScheme({colorScheme: "secondary",components: ["Badge", "Tag", "Button"], // もし、空の配列を渡した場合は、すべてのコンポーネントに設定されます。}),)()const App = () => {return (<UIProvider theme={customTheme}><YourApplication /></UIProvider>)}
useToken
を使う
コンポーネント内で、テーマに定義されているトークンの値を取得する場合には、useToken
を使用します。
編集可能な例
const bg = useToken("colors", "primary") return ( <Box bg={bg} p="md" color="white"> Primary for color tokens is "{bg}" </Box> )
これは、Yamada UI以外のライブラリのコンポーネントのスタイルを設定するのに適しています。
テーマをもっと学びたい場合は、テーマをカスタマイズするやコンポーネントのスタイルをご覧ください。
スタイルの応用
基本を学ぶでは、Style props
やショートハンドを学びました。ここでは、要素のレンダリングを変更する方法やYamada UIのスタイルシステムの重要度を学びます。
as
について
Yamada UIのすべてのコンポーネントは、アサーション
することができます。
アサーション
とは、コンポーネントにHTMLタグや別のコンポーネントを渡すことで、元のコンポーネントのスタイルや挙動を保持しつつ、異なる要素やコンポーネントとしてレンダリングする機能です。
例えば、Button
のスタイルや挙動を保持しつつ、HTMLタグのa
に変更する必要があるとします。
編集可能な例
<Button as="a" href="https://github.com/yamada-ui/yamada-ui" target="_blank"> GitHub </Button>
Yamada UIは、開発者が各コンポーネントにas
を設定することを推奨
しています。なぜなら、多くのコンポーネントはdiv
であり、適切にheader
やfooter
を設定しなければ、文章を論理的なセクションに構成しているとは言えません。積極的にas
を設定していきましょう。
sx
やcss
について
Yamada UIは、スタイルを設定するためにStyle props
以外にもsx
やcss
を提供しています。
sx
:Style props
と同様にテーマのトークンが使用でき、CSS
のセレクターなども記述できるオブジェクトを受け入れます。css
: EmotionのCSS
のオブジェクトを受け入れます。
sx
とcss
が必要になるケースは、ほとんどありません。次のセクションで説明する順序についてにおいて、sx
とcss
の存在を理解していれば問題ありません。
編集可能な例
<Box p="md" display="flex" gap="sm" sx={{ "&:hover > p": { color: "danger", }, }} > <Text as="span">Hover me!</Text> <Text>This is Text</Text> </Box>
css
は、Yamada UIのStyle props
を使用できません。
順序について
Yamada UIのコンポーネントは、いくつかのCSS
のオブジェクトを受け入れ、設定される順序があります。
順序は以下の通りで、同じプロパティの値は上書きされます。
baseStyle
: テーマのbaseStyle
のオブジェクトsize
: テーマのsize
のオブジェクトvariant
: テーマのvariant
のオブジェクトprops
: コンポーネントのスタイルのprops
sx
: コンポーネントのsx
のprops
css
: コンポーネントのcss
のprops
Style props
やショートコードをもっと学びたい場合は、こちらをご覧ください。
レスポンシブの応用
基本を学ぶでは、レスポンシブスタイルの設定を学びました。ここでは、現在のブレイクポイントを取得する方法や便利なユーティリティを学びます。
useBreakpoint
を使う
コンポーネント内で現在のブレイクポイントを取得する場合には、useBreakpoint
を使用します。
編集可能な例
const breakpoint = useBreakpoint() return <Box p="md">The current breakpoint is "{breakpoint}"</Box>
useBreakpointValue
を使う
useBreakpointValue
は、引数で渡されたオブジェクトから現在のブレイクポイントの値を返すカスタムフックです。
編集可能な例
const breakpoint = useBreakpoint() const bg = useBreakpointValue({ base: "red.500", "2xl": "pink.500", xl: "blue.500", lg: "green.500", md: "yellow.500", sm: "purple.500", }) return ( <Box bg={bg} p="md" color="white"> The current breakpoint is "{breakpoint}" </Box> )
これは、Yamada UI以外のライブラリのコンポーネントのスタイルを設定するのに適しています。
レスポンシブスタイルをもっと学びたい場合は、こちらをご覧ください。
カラーモードの応用
基本を学ぶでは、カラーモードのスタイルの設定を学びました。ここでは、現在のカラーモードを取得する方法や便利なユーティリティを学びます。
useColorMode
を使う
コンポーネント内で現在のカラーモードを取得する場合には、useColorMode
を使用します。
編集可能な例
const { colorMode, internalColorMode } = useColorMode() return ( <Box p="md"> The current colorMode is "{colorMode}", internal colorMode is " {internalColorMode}" </Box> )
colorMode
は、現在のlight
とdark
を返します。
internalColorMode
は、現在のlight
とdark
またはsystem
を返します。
useColorModeValue
を使う
useColorModeValue
は、第1引数にライトモードの値、第2引数にダークモードの値を渡し、現在のカラーモードの値を返すカスタムフックです。
編集可能な例
const { colorMode } = useColorMode() const bg = useColorModeValue("blackAlpha.800", "whiteAlpha.800") const color = useColorModeValue("whiteAlpha.800", "blackAlpha.800") return ( <Box p="md" bg={bg} color={color}> The current colorMode is "{colorMode}" </Box> )
これは、Yamada UI以外のライブラリのコンポーネントのスタイルを設定するのに適しています。
カラーモードをもっと学びたい場合は、こちらをご覧ください。
アニメーションの応用
基本を学ぶでは、useAnimation
とMotion
コンポーネントを学びました。ここでは、useAnimation
で複数のアニメーションの設定や新しく動的なアニメーションを設定するuseDynamicAnimation
を学びます。
useAnimation
で複数のアニメーションを使う
useAnimation
は、配列も受け入れます。
編集可能な例
const animation = useAnimation([ { keyframes: { "0%": { bg: "red.500", }, "20%": { bg: "green.500", }, "40%": { bg: "purple.500", }, "60%": { bg: "yellow.500", }, "80%": { bg: "blue.500", }, "100%": { bg: "red.500", }, }, duration: "10s", iterationCount: "infinite", timingFunction: "linear", }, { keyframes: { "0%": { h: "xs", }, "50%": { h: "md", }, "100%": { h: "xs", }, }, duration: "10s", iterationCount: "infinite", timingFunction: "linear", }, { keyframes: { "0%": { w: "full", }, "50%": { w: "50%", }, "100%": { w: "full", }, }, duration: "10s", iterationCount: "infinite", timingFunction: "linear", }, ]) return ( <Box h="md"> <Box w="full" h="xs" animation={animation} /> </Box> )
useDynamicAnimation
を使う
useDynamicAnimation
は、引数にオブジェクトを渡します。オブジェクトのキーはアニメーションのキーになり、setState
の引数にキーを渡すことでアニメーションが変更されます。
編集可能な例
const [animation, setAnimation] = useDynamicAnimation({ moveLeft: { keyframes: { "0%": { transform: "translateX(400%)", }, "100%": { transform: "translateX(0%)", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, moveRight: { keyframes: { "0%": { transform: "translateX(0%)", }, "100%": { transform: "translateX(400%)", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, }) return ( <VStack alignItems="flex-start"> <Button onClick={() => setAnimation((prev) => prev === "moveRight" ? "moveLeft" : "moveRight", ) } > Click me! </Button> <Box bg="primary" p="md" rounded="md" color="white" animation={animation}> Box </Box> </VStack> )
動的なアニメーションと複数のアニメーションを組み合わせることも可能です。
編集可能な例
const [animation, setAnimation] = useDynamicAnimation< Record<"moveLeft" | "moveRight", AnimationStyle[]> >({ moveLeft: [ { keyframes: { "0%": { transform: "translateX(400%)", }, "100%": { transform: "translateX(0%)", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, { keyframes: { "0%": { bg: "secondary", }, "100%": { bg: "primary", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, ], moveRight: [ { keyframes: { "0%": { transform: "translateX(0%)", }, "100%": { transform: "translateX(400%)", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, { keyframes: { "0%": { bg: "primary", }, "100%": { bg: "secondary", }, }, duration: "slower", fillMode: "forwards", timingFunction: "ease-in-out", }, ], }) return ( <VStack alignItems="flex-start"> <Button onClick={() => setAnimation((prev) => prev === "moveRight" ? "moveLeft" : "moveRight", ) } > Click me! </Button> <Box bg="primary" p="md" rounded="md" color="white" animation={animation}> Box </Box> </VStack> )
アニメーションをもっと学びたい場合は、こちらをご覧ください。
Congratulations!
おめでとうございます🎉
これで、あなたは素敵の山田
になることができました🥳
もっと学習をする
Yamada UIをもっと知るために、テーマやコンポーネントを学んでみませんか?😎
テーマについて学ぶ
Yamada UIのデフォルトのテーマを知り、色・フォント・その他のテーマの値を作成・変更する方法を学ぶ。
コンポーネントを探索する
Yamada UIは、100以上の柔軟性が高いコンポーネントを提供しています。すべてのコンポーネントは、アニメーション・ダークモードをサポートしています。
ソースコードを探索する
Yamada UIのパッケージ・ドキュメントサイトはオープンソースです。Yamada UIを気に入ったら、スターを付けてください。
GitHubでこのページを編集する