Replies: 9 comments 22 replies
-
这个问题,要先看你用的是什么组件库 |
Beta Was this translation helpful? Give feedback.
-
@SeigeC https://ant.design/components/config-provider-cn |
Beta Was this translation helpful? Give feedback.
-
@SeigeC antd-style 的方案是 antd v5 做主题的最佳实践。如果你用 antd v5, 无脑上就好:https://ant-design.github.io/antd-style/guide/switch-theme |
Beta Was this translation helpful? Give feedback.
-
使用了 umi max 的 layout,Provider 该写在哪里呢? |
Beta Was this translation helpful? Give feedback.
-
实时修改theme里的值就行 有个dark 和light |
Beta Was this translation helpful? Give feedback.
-
@SeigeC @arvinxx @Wxh16144 看看这里umi-plugin-antd-style,有个在线 demo umi-plugin-antd-style在 umi 中快速接入 antd-style 的实验性插件,欢迎试用并提出修改意见,最终版将会发布在官方组织中。 可以和 max 集成使用和官方的 antd 插件结合使用效果更佳。 使用安装依赖 pnpm i umi-plugin-antd-style 增加使用插件配置,在 config/config.ts 或者 .umirc.ts 文件中编写配置 import { defineConfig } from "umi";
export default defineConfig({
plugins: [require.resolve("umi-plugin-antd-style")],
// 配置开启
antdStyle: {
} as ['antd-style'].ThemeProviderProps
}); 配置配置,在 config/config.ts 或者 .umirc.ts 文件中编写配置 import { defineConfig } from "umi";
export default defineConfig({
antdStyle: {
// 在这里配置所有的默认值,会被运行时配置修改
} as ['antd-style'].ThemeProviderProps
}); 如果需要配置一些使用到 react 的配置,可以在运行时 src/app.ts 中配置 antdStyle import { RuntimeAntdStyleConfig } from "umi";
export const antdStyle: RuntimeAntdStyleConfig = (memo) => {
memo.appearance = "dark";
return memo;
}; 动态切换主题import { useThemeConfig } from "umi";
import {
Button,
Space,
} from "antd";
export default function Page() {
const { themeConfig, setThemeConfig } = useThemeConfig();
console.log("themeConfig", themeConfig);
return (
<Layout>
<h1>with antd-style</h1>
<Space>
<Button
onClick={() => {
setThemeConfig({
...themeConfig,
appearance:
themeConfig?.appearance === "light" ? "dark" : "light",
});
}}
>
切换主题
</Button>
</Space>
</Layout>
);
} 约定
理论上,用户可以通过升级项目中的 antd-style 版本和修改配置来完成变更,不需要等插件修改。 更多 api 请参考 antd-style 的官网 https://ant-design.github.io/antd-style/api/theme-provider |
Beta Was this translation helpful? Give feedback.
-
@xiaohuoni 感觉这个配置是需要运行时配置,构建时的配置不太够。原因在于比如我有动态 token 的场景,基于 theme 改不同值的话,是需要运行时来做的。 |
Beta Was this translation helpful? Give feedback.
-
目前动态切换主题可以在 切换时,直接更改全局变量值即可。 有关更优雅的 react 切换主题打开方式,由我们英俊潇洒的 @xiaohuoni 继续跟进支持。 |
Beta Was this translation helpful? Give feedback.
-
动态切换主题注意:该功能仅 antd v5 可用 当存在主题相关的配置时开启 import { Layout, Space, Switch, version } from 'antd';
import { useAntdConfig, useAntdConfigSetter } from 'umi';
export default function Page() {
const setAntdConfig = useAntdConfigSetter();
const antdConfig = useAntdConfig();
return (
<Layout>
<h1>with antd@{version}</h1>
<Space>
isDarkTheme
<Switch
checked={antdConfig?.dark}
onChange={() => {
setAntdConfig({
dark: !antdConfig?.dark,
});
}}
></Switch>
</Space>
<Space>
isCompactTheme
<Switch
checked={antdConfig?.compact}
onChange={() => {
setAntdConfig({
compact: !antdConfig?.compact,
});
}}
></Switch>
</Space>
</Layout>
);
} |
Beta Was this translation helpful? Give feedback.
-
umi4 怎么实现动态切换主题
Beta Was this translation helpful? Give feedback.
All reactions