Перейти к основному содержимому

Темизация

Настройка темы

Создайте файл с конфигурацией темы/тем в корне src или в отдельной папке с контекстами.

Пример ThemeContext.ts:

import { makeTheme } from 'react-append-styles';

type TTheme = { primaryColor: string };
const themes: Record<'main' | 'dark', TTheme> = {
main: {
primaryColor: '#123456',
},
dark: {
primaryColor: '#000',
},
};

// Set the default theme name: main
const ThemeContext = makeTheme<TTheme>('main', themes);

export default ThemeContext;

Использование ThemeContext

makeClasses

Идентично использованию обычных классов, но с поддержкой темизации.

Пример:

import React from 'react';
import ThemeContext from '../ThemeContext.ts';

const useClasses = ThemeContext.makeClasses<'wrapper', { textColor: string }>(({ theme, textColor }) => ({
wrapper: { backgroundColor: theme.primaryColor, color: textColor },
}));

const MyComponent: React.FC = () => {
const { wrapper } = useClasses({ textColor: 'gray' });

return (<div className={wrapper}>MyComponent</div>);
};

useTheme

Возвращает объект стилей выбранной темы.

Пример:

import React from 'react';
import ThemeContext from '../ThemeContext.ts';

const MyComponent: React.FC = () => {
const theme = ThemeContext.useTheme();

return (<div style={{ backgroundColor: theme.primaryColor }}>MyComponent</div>);
};

switchTheme

Осуществляет переключение темы по имени.

Пример:

import React from 'react';
import ThemeContext from '../ThemeContext.ts';

const MyComponent: React.FC = () => {
const enableDark = React.useCallback(() => {
ThemeContext.switchTheme('dark');
}, []);

return (<button onClick={enableDark}>Enable dark</button>);
};