๋ชจ๋ฐ์ผ ์ฑ์์ ๋คํฌ ๋ชจ๋ ์ง์์ ๊ฑฐ์ ํ์๋ค.
ํ์ง๋ง ๋จ์ํ ์์๋ง ๋ฐ๊พธ๋ ๊ฒ ์๋๋ผ,
์ฑ ์ ์ฒด์์ ์ผ๊ด๋ ํ
๋ง๋ฅผ ์ ์ฉํ๊ณ , ์ ์ญ์์ ๊ด๋ฆฌํ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๋ ๊ฒ ์ค์ํ๋ค.
์ด๋ฒ ๊ธ์ React Native์์ ํ ๋ง(๋ผ์ดํธ/๋คํฌ)๋ฅผ ์ ์ฉํ๊ณ ์ ์ญ ์ํ๋ก ๊ด๋ฆฌํ๋ ์ ๋ต์ ์ ๋ฆฌํ ๊ธ์ด๋ค.
useColorScheme
import { useColorScheme } from 'react-native';
const scheme = useColorScheme(); // 'light' | 'dark'
light
or dark
๋ฐํ npm install zustand
const useThemeStore = create((set) => ({
theme: 'system', // 'light' | 'dark' | 'system'
setTheme: (theme) => set({ theme }),
}));
useColorScheme()
๋ก ์ฐ๋export const LightTheme = {
background: '#ffffff',
text: '#000000',
};
export const DarkTheme = {
background: '#000000',
text: '#ffffff',
};
npm install styled-components
<ThemeProvider theme={currentTheme}>
<App />
</ThemeProvider>
const currentTheme = userTheme === 'system'
? scheme === 'dark' ? DarkTheme : LightTheme
: userTheme === 'dark' ? DarkTheme : LightTheme;
โ
Text
, View
๋ฑ์ ์์ ๋ถ๊ธฐ ์ฒ๋ฆฌ๊ฐ ์ฌ์์ง
npm install tailwind-rn
tailwind.config.js
์์ darkMode: 'class'
์ค์ useColorScheme()
๋ก ํด๋์ค ์กฐ๊ฑด ๋ถ๊ธฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ const toggleTheme = () => {
const current = useThemeStore.getState().theme;
useThemeStore.setState({
theme: current === 'dark' ? 'light' : 'dark',
});
};
โ
๋ฒํผ ๋๋ฅผ ๋ ๋ผ์ดํธ โ ๋คํฌ ์ ํ
UX ๊ตฌํ
โ
ํ
๋ง ์ ํ ์ํ๋ AsyncStorage
์ ์ ์ฅํด์ ์ ์ง
ํ๋ซํผ | ๋คํฌ๋ชจ๋ ์ค์ |
---|---|
iOS ์๋ฎฌ๋ ์ดํฐ | Settings > Developer > Appearance |
Android ์๋ฎฌ๋ ์ดํฐ | Settings > Display > Dark Theme |
Expo Go | ์๋ ๊ฐ์ง or manual switch ๊ฐ๋ฅ |
์ด๊ธฐ์๋ ๊ทธ๋ฅ useColorScheme()
๋ง ์จ๋ ๋๋ ์ค ์์๋๋ฐ,
์ ์ ๊ฐ ์ง์ ํ
๋ง๋ฅผ ์ค์ ํ๊ณ
๊ทธ ์ํ๊ฐ ์ฑ ์ ์ฒด์์ ์ผ๊ด๋๊ฒ ์ ์ฉ๋๊ธฐ ์ํด์๋
์ํ๊ด๋ฆฌ + ํ
๋ง ๊ฐ์ฒด + UI ํ๋ ์์ํฌ ์ฐ๋์ด ๋ชจ๋ ํ์ํ๋ค.
์ง๊ธ์ Zustand
๋ก ํ
๋ง ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ,
styled-components
๋ก ํ
๋ง ๊ฐ์ฒด๋ฅผ ์ ์ฉํด์
์ฑ ์ ์ญ์์ ์ผ๊ด๋ ํ
๋ง UI๋ฅผ ์ ๊ณตํ๊ณ ์๋ค.
๐ โ์ข์ ํ ๋ง๋ ์์์ด ์๋๋ผ ๊ตฌ์กฐ์์ ์์๋๋ค.โ