テーマの作成
メモ
unstable_moduleResolution
オプションは、テーマ API を有効にするために StyleX Babel 設定で有効にする必要があります。
変数が定義されると、特定の UI サブツリーに対してそれらの変数の値をオーバーライドする代替の「テーマ」を作成できます。
テーマの作成
次のように、任意の変数グループをインポートしてテーマを作成できます。
themes.js
import * as stylex from '@stylexjs/stylex';
import {colors, spacing} from './tokens.stylex';
// A constant can be used to avoid repeating the media query
const DARK = '@media (prefers-color-scheme: dark)';
// Dracula theme
export const dracula = stylex.createTheme(colors, {
primaryText: {default: 'purple', [DARK]: 'lightpurple'},
secondaryText: {default: 'pink', [DARK]: 'hotpink'},
accent: 'red',
background: {default: '#555', [DARK]: 'black'},
lineColor: 'red',
});
テーマの適用
「テーマ」は、stylex.create()
で作成したものと同様のスタイルオブジェクトです。それらは stylex.props()
を使用して要素に適用し、その要素とそのすべての子孫の変数をオーバーライドできます。
components/MyComponent.js
import * as stylex from '@stylexjs/stylex';
import {colors, spacing} from '../tokens.styles';
import {dracula} from '../themes';
const styles = stylex.create({
container: {
color: colors.primaryText,
backgroundColor: colors.background,
padding: spacing.medium,
},
});
<div {...stylex.props(dracula, styles.container)}>{children}</div>;
注意: 変数グループ内のすべての変数は、テーマを作成するときにオーバーライドする必要があります。この選択は、偶発的な省略を防ぐのに役立ちます。まれに面倒なことを犠牲にしても。
変数の定義と使用方法とは異なり、テーマはコードベースの任意の場所で stylex.createTheme()
で作成し、ファイルやコンポーネント間で渡すことができます。
情報
同じ変数グループに対して複数のテーマが同じ HTML 要素に適用されている場合、最後に適用されたテーマが優先されます。