theme.ts
import { extendTheme, type ThemeConfig } from "@chakra-ui/react";
const config: ThemeConfig = {
initialColorMode: "light",
useSystemColorMode: false,
};
const theme = extendTheme({ config });
export default theme;
initialColorMode : 처음 접속 시 default로 제공되는 테마 설정
useSystemColorMode : 사용자의 설정을 따를 것인지 설정, initialColorMode를 지정했으니 false로 두었다.
로컬 저장소에 colorMode값이 저장된다.
index.tsx
root.render(
<React.StrictMode>
<ChakraProvider theme={theme}>
<ColorModeScript initialColorMode={theme.config.initialColorMode} />
<RouterProvider router={router} />
</ChakraProvider>
</React.StrictMode>
);
색깔을 테마에 따라 원하는 색상으로 지정하고 싶을 때는 아래와 같이 useColorModeValue 함수를 호출해서 변수를 선언해주면 된다.
const logoColor = useColorModeValue("red.500", "red.200");
//
<Box color={logoColor}></Box>
import { FaMoon, FaSun } from "react-icons/fa6";
const Icon = useColorModeValue(FaMoon, FaSun);
//
<IconButton icon={<Icon />}/>
해당 컴포넌트를 <LightMode> 혹은 <DarkMode> 컴포넌트로 감싸주면 된다.
<LightMode>
<Box color={"red.500"}></Box>
</LightMode>
다크모드를 구현하고자 한다면 보통 테마 전환 기능도 만들 것이다.
const { colorMode, toggleColorMode } = useColorMode();
//
<Button onClick={toggleColorMode} />
이것만 있으면 구현이 된다..............................