์์ฆ ์ถ์๋๋ ์ฑ๋ค์ ๋ณด๋ฉด
๊ฑฐ์ ๋๋ถ๋ถ ๋คํฌ ๋ชจ๋(Dark Mode)๋ฅผ ์ง์ํ๋ค.
๋์ ํผ๋ก๋ฅผ ์ค์ด๊ณ , ๋ฐฐํฐ๋ฆฌ ์ฌ์ฉ๋๋ ์ค์ด๋ฉฐ, ์ฌ์ฉ์์ ์ ํธ๋์ ๋ฐ๋ผ UI๋ฅผ ๋ฐ๊พธ๋ ๊ธฐ๋ฅ์ด๋ค.
React Native์์๋ ๋คํฌ ๋ชจ๋๋ฅผ ์ ์ฉํ ์ ์๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค.
์ด๋ฒ ๊ธ์ ์์คํ
ํ
๋ง ๊ฐ์ง๋ถํฐ ์ปค์คํ
ํ
๋ง ์์คํ
๊ตฌ์ถ๊น์ง ์ ๋ฆฌํ ๊ธ์ด๋ค.
import { useColorScheme } from 'react-native';
const scheme = useColorScheme(); // 'light' | 'dark'
useEffect
์์ด ์ฆ์ ํ์ธ ๊ฐ๋ฅexport const LightTheme = {
background: '#ffffff',
text: '#000000',
};
export const DarkTheme = {
background: '#000000',
text: '#ffffff',
};
import { ThemeProvider } from 'styled-components/native';
const scheme = useColorScheme();
const theme = scheme === 'dark' ? DarkTheme : LightTheme;
return (
<ThemeProvider theme={theme}>
<App />
</ThemeProvider>
);
const Title = styled.Text`
color: ${(props) => props.theme.text};
`;
์ฌ์ฉ์๊ฐ ์๋์ผ๋ก ๋ผ์ดํธ/๋คํฌ ๋ชจ๋๋ฅผ ์ ํํ ์ ์๊ฒ ํ๋ ค๋ฉด ์ํ ์ ์ฅ์ด ํ์ํ๋ค.
const useThemeStore = create((set) => ({
isDark: false,
toggleTheme: () => set((state) => ({ isDark: !state.isDark })),
}));
const theme = isDark ? DarkTheme : LightTheme;
ํ๊ฒฝ | ๋คํฌ๋ชจ๋ ํ ์คํธ ๋ฐฉ๋ฒ |
---|---|
iOS ์๋ฎฌ๋ ์ดํฐ | ์ค์ > Developer > Appearance |
Android ์๋ฎฌ๋ ์ดํฐ | ์ค์ > ๋์คํ๋ ์ด > ๋คํฌ ํ ๋ง |
Expo | Expo ์ฑ > ์ฅ์น ํ ๋ง ๊ฐ์ง ๊ฐ๋ฅ |
์ฒ์์ ๋คํฌ๋ชจ๋๋ UI์ ์์๋ง ๋ฐ๊พธ๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋๋ฐ,
์ฌ์ฉ์๊ฐ ์ฑ์ ์ด๋ป๊ฒ ๋๋ผ๋์ง์ ์ํฅ์ ์ฃผ๋ ์ค์ํ UX ํฌ์ธํธ๋ผ๋ ๊ฑธ ์๊ฒ ๋๋ค.
์ง๊ธ์ ๋ฌด์กฐ๊ฑด ๋คํฌ ๋ชจ๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ๊ณ ๋ คํด์ ๋์์ธ ์์คํ
๋ถํฐ ์ค๊ณํ๊ณ ,
Zustand๋ฅผ ์จ์ ์๋ ํ ๊ธ๋ ํจ๊ป ์ง์ํ๊ณ ์๋ค.
๐ โ์ข์ ์ฑ์ ๋น์์๋ ์ด๋ ์์๋ ๋๊ฐ์ด ๋ฉ์ ธ์ผ ํ๋ค.โ