본문으로 건너뛰기

ThemeProvider

ThemeProvider는 프로젝트 전반에서 사용할 폰트와 테마 관련 설정을 관리합니다.

Props

PropTypeDefaultDescription
themeFontsThemeFontsundefined폰트 굵기별로 사용할 폰트 이름을 정의
isDarkModeEnabledbooleantrue다크 모드 활성화 여부
customPalettefunctionundefined커스텀 색상 팔레트 팩토리 함수
childrenReact.ReactNodeRequired자식 컴포넌트

기본 사용법

import { ThemeProvider } from '@0610studio/zs-ui';

<ThemeProvider>
{/* 앱 내용 */}
</ThemeProvider>

폰트 설정

import { ThemeProvider } from '@0610studio/zs-ui';
import { useFonts } from 'expo-font';

const themeFonts = {
100: 'Pretendard-Thin',
200: 'Pretendard-ExtraLight',
300: 'Pretendard-Light',
400: 'Pretendard-Regular',
500: 'Pretendard-Medium',
600: 'Pretendard-SemiBold',
700: 'Pretendard-Bold',
800: 'Pretendard-ExtraBold',
900: 'Pretendard-Black',
};

const requireFonts = {
'Pretendard-Thin': require('../assets/fonts/Pretendard-Thin.otf'),
'Pretendard-ExtraLight': require('../assets/fonts/Pretendard-ExtraLight.otf'),
'Pretendard-Light': require('../assets/fonts/Pretendard-Light.otf'),
'Pretendard-Regular': require('../assets/fonts/Pretendard-Regular.otf'),
'Pretendard-Medium': require('../assets/fonts/Pretendard-Medium.otf'),
'Pretendard-SemiBold': require('../assets/fonts/Pretendard-SemiBold.otf'),
'Pretendard-Bold': require('../assets/fonts/Pretendard-Bold.otf'),
'Pretendard-ExtraBold': require('../assets/fonts/Pretendard-ExtraBold.otf'),
'Pretendard-Black': require('../assets/fonts/Pretendard-Black.otf'),
};

export default function App() {
const [loaded] = useFonts(requireFonts);

if (!loaded) {
return null;
}

return (
<ThemeProvider themeFonts={themeFonts}>
{/* 앱 내용 */}
</ThemeProvider>
);
}

커스텀 팔레트 사용

import { ThemeProvider, themeFactory } from '@0610studio/zs-ui';

const customPalette = themeFactory({
light: {
primary: {
main: '#2196F3',
},
},
dark: {
primary: {
main: '#64B5F6',
},
},
});

<ThemeProvider customPalette={customPalette}>
{/* 앱 내용 */}
</ThemeProvider>

자세한 내용은 ThemeFactory 문서를 참조하세요.

다크 모드 비활성화

import { ThemeProvider } from '@0610studio/zs-ui';

<ThemeProvider isDarkModeEnabled={false}>
{/* 앱 내용 - 항상 라이트 모드 */}
</ThemeProvider>

useTheme 훅

ThemeProvider 내부에서 useTheme 훅을 사용하여 테마 정보에 접근할 수 있습니다:

import { useTheme } from '@0610studio/zs-ui';
import { View, Text } from 'react-native';

function MyComponent() {
const { palette, typography, elevation } = useTheme();

return (
<View style={{ backgroundColor: palette.background.base }}>
<Text style={typography.heading[1]}>제목</Text>
</View>
);
}

테마 모드 전환

import { useTheme } from '@0610studio/zs-ui';

function MyComponent() {
const { palette } = useTheme();

return (
<Pressable onPress={palette.toggleTheme}>
<Text>현재 모드: {palette.mode}</Text>
</Pressable>
);
}

시스템 색상 스키마 사용

import { useTheme } from '@0610studio/zs-ui';

function MyComponent() {
const { palette } = useTheme();

// 시스템 색상 스키마 사용 여부 설정
palette.setUseSystemColorScheme(true);

// 현재 모드 확인
const currentMode = palette.mode; // 'light' | 'dark'
const isUsingSystem = palette.isUsingSystemColorScheme; // boolean
}

자세한 내용은 Palette 문서Typography 문서를 참조하세요.