私の新しい反応Webアプリにこの暗いテーマを使用したいと思います: https://github.com/ant-design/ant-design-dark-theme
テーマのカスタマイズに関する指示 ここ およびREADME ここ でのテーマの適用に関する指示に従ってください。私のconfig-overrides.jsは次のようになります。
const { darkTheme } = require('@ant-design/dark-theme');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: darkTheme
}),
);
これは機能していないようです。たとえば、Menu antdコンポーネントがまだ「暗い」テーマではなく「明るい」テーマで表示されています。
私が明示的に設定せずに、すべてのantdコンポーネントをダークテーマでレンダリングしたいのですが。それは可能ですか?はいの場合、私は何が間違っていますか?
ここではフロントエンドの開発者ではないので、明らかなものがない場合はお知らせください。
デフォルトのエクスポートが変数を持つオブジェクトである場合、コードはデフォルトのエクスポートを破壊しています。したがって、次のようになります。
const darkTheme = require('@ant-design/dark-theme').default;
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: darkTheme
}),
);
インポートされたログdarkTheme
変数をコンソールする場合、すべてのスタイル変数はdarkTheme.default
オブジェクト内に存在します。 aliyum-theme
を実装しました。
したがって、コードを機能させるには、config-overrides.js
ファイル内のmodifyVars
を次のように変更する必要があります。
const { darkTheme } = require('@ant-design/dark-theme');
const { override, fixBabelImports, addLessLoader } = require('customize-cra');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
modifyVars: {...darkTheme.default}
}),
);
ProTip:アプリケーション内でdarkThemeをオーバーライドするには、独自のjavascriptファイルを作成してconfig-overrides.js
ファイル内にインポートし、modifyVars
内で分解することができます
https://www.npmjs.com/package/antd-theme
app.jsx
import { Button, Select } from 'antd';
import { ThemeProvider, useTheme } from 'antd-theme';
import React from 'react';
import ReactDOM from 'react-dom';
import { SketchPicker } from 'react-color';
const initialTheme = {
name: 'default',
variables: { 'primary-color': '#00ff00' },
};
const ThemeSelect = () => {
const [{ name, variables, themes }, setTheme] = useTheme();
return (
<>
<Select
style={{ width: 100 }}
value={name}
onChange={
(theme) => setTheme({ name: theme, variables })
}
>
{
themes.map(
({ name }) => (
<Select.Option key={name} value={name}>
{name}
</Select.Option>
)
)
}
</Select>
<SketchPicker
color={variables['primary-color']}
onChange={(value) => {
// Will update all css attributes affected by primary-color
setTheme({ name, variables: { 'primary-color': value.hex } });
}}
/>
</>
);
};
const App = () => {
const [theme, setTheme] = React.useState(initialTheme);
return (
<ThemeProvider
theme={theme}
onChange={(value) => setTheme(value)}
>
<ThemeSelect />
<Button type="primary">Button</Button>
</ThemeProvider>
);
};
ReactDOM.render(<App />, document.getElementById('root'));
React-app-rewiredでreact-app-rewire-less
およびcustomize-cra
を使用している場合は、次のようにJavaScriptを有効にします
config-overrides.js
const { override, fixBabelImports, addLessLoader, addPostcssPlugins, adjustStyleLoaders, addWebpackPlugin } = require('customize-cra');
const AntdThemePlugin = require('antd-theme/plugin');
module.exports = override(
fixBabelImports('import', {
libraryName: 'antd',
libraryDirectory: 'es',
style: true,
}),
addLessLoader({
javascriptEnabled: true,
}),
adjustStyleLoaders(
(loaders) => {
loaders.use[0] = {
loader: AntdThemePlugin.loader
}
}
),
addWebpackPlugin(
new AntdThemePlugin({
themes: [
{
name: 'dark',
filename: require.resolve('antd/lib/style/themes/dark.less'),
},
{
name: 'compact',
filename: require.resolve('antd/lib/style/themes/compact.less'),
},
],
})
),
);