Skip to content

fix(provider): avoid stale styles when toggling dark/light theme#9538

Merged
chenshuai2144 merged 1 commit intoant-design:masterfrom
zhu0629:fix/issue-9373-theme-style-refresh
Mar 10, 2026
Merged

fix(provider): avoid stale styles when toggling dark/light theme#9538
chenshuai2144 merged 1 commit intoant-design:masterfrom
zhu0629:fix/issue-9373-theme-style-refresh

Conversation

@zhu0629
Copy link
Copy Markdown
Contributor

@zhu0629 zhu0629 commented Mar 6, 2026

Summary

  • avoid stale styles when toggling dark/light theme
  • make style registration path theme-sensitive
  • ensure each theme-key change gets a fresh style path version to prevent style order/cache conflicts
  • keep current wrapSSR identity behavior unchanged

Background

useStyle in provider registers styles via useStyleRegister with side effects. With a static path key, switching theme could reuse stale style cache/order and make styles not fully recover when toggling back.

Fix

  • derive a theme-aware styleKey from hashId, theme.id, token._tokenKey, and token.themeId
  • track key changes and increment a local version so style path stays monotonic across toggles
  • pass [componentName, styleKey, version] to useStyleRegister

Repro

  1. Open ProLayout demo with theme switcher
  2. Toggle light -> dark -> light
  3. Before: can get stale dark styles after toggling back
  4. After: styles switch correctly in both directions

Related

Summary by CodeRabbit

发布说明

  • 重构
    • 优化样式注册机制,增强主题切换过程中的稳定性和一致性。

@dosubot dosubot bot added the size:S This PR changes 10-29 lines, ignoring generated files. label Mar 6, 2026
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses an issue in v3 where styles would not refresh immediately upon switching themes or tokens, leading to stale visual states. The solution involves enhancing the style registration mechanism to be aware of theme and token changes, ensuring that styles are correctly re-registered and applied when these dynamic properties are updated.

Highlights

  • Style Re-registration: Ensured styles are re-registered when theme or token configurations change in v3 by making the useStyleRegister path theme-sensitive.
  • Path Key Enhancement: Incorporated hashId, theme.id, token._tokenKey, and token.themeId into the stylePath array to create a unique identifier for style registration.
  • hashId Behavior: Maintained the existing v3 identity hashId behavior without alteration.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • src/provider/useStyle/index.ts
    • Modified the useStyleRegister call to construct a stylePath array that includes componentName, hashId, theme.id, token._tokenKey, and token.themeId to ensure theme-sensitive style re-registration.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Mar 6, 2026

📝 Walkthrough

Walkthrough

将样式注册路径由固定组件名替换为包含 componentName、hashId、theme.id、token._tokenKey 与 token.themeId 的复合 stylePath,并通过 styleKey 与 styleVersionRef 跟踪主题/token 变化,返回值中保留并透出 wrapSSR 和 hashId。

Changes

Cohort / File(s) Summary
样式注册路径动态化
src/provider/useStyle/index.ts
引入 useRef,基于 hashIdtheme.idtoken._tokenKeytoken.themeId 计算 styleKey,用 lastStyleKeyRefstyleVersionRef 在键变化时递增版本,构建 stylePath[componentName, styleKey, styleVersion](过滤空项)并传给 useStyleRegister;移除旧注释并继续透出 wrapSSRhashId

Sequence Diagram(s)

(本次变更为单文件内部的样式路径与版本管理,无需序列图)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

兔子的诗

🐰 新径绕草绿,
键随风转又生色,
版本轻敲旧路径,
样式随夜换晨曦,
我在叶间蹦跳喜。

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: fixing stale styles when toggling dark/light theme, which directly matches the code changes that implement a theme-sensitive style registration mechanism.
Linked Issues check ✅ Passed The pull request successfully addresses issue #9373 by implementing a theme-aware styleKey mechanism that makes style registration sensitive to theme and token changes, ensuring immediate style refresh on theme toggles.
Out of Scope Changes check ✅ Passed All code changes in src/provider/useStyle/index.ts are directly related to fixing theme-sensitive style registration and do not introduce unrelated modifications.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@dosubot dosubot bot added ⭕️ bug Something isn't working 🧱 antd labels Mar 6, 2026
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request effectively addresses the issue of stale styles during theme changes by incorporating theme-sensitive keys into the style registration path. The logic is sound and directly solves the described problem. I have one minor suggestion to improve code clarity and correctness in how a theme property is accessed.

const stylePath = [
componentName,
hashId,
(theme as any)?.id,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The theme object returned by antdTheme.useToken() is non-nullable, so the optional chaining operator (?.) is unnecessary here. Removing it will make the code slightly cleaner and more accurately reflect the behavior of the hook.

Suggested change
(theme as any)?.id,
(theme as any).id,

@zhu0629 zhu0629 force-pushed the fix/issue-9373-theme-style-refresh branch from ae55fc4 to 839a986 Compare March 6, 2026 11:54
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/provider/useStyle/index.ts (1)

121-127: 添加注释说明缓存键组成部分来提高代码可读性

当前代码使用 theme.idtoken._tokenKeytoken.themeId 作为样式缓存键。其中 theme.id@ant-design/cssinjs 的文档化属性(用于缓存的唯一主题标识),token.themeId 已在 ProAliasToken 中定义,但 token._tokenKey 是 cssinjs 的内部属性。虽然这是 antd 推荐的缓存失效模式,但添加注释说明各部分的作用会增强代码清晰度。

💡 建议添加注释
+ // Make path theme-sensitive so token/theme switches trigger style re-registration.
+ // Properties: theme.id (cssinjs theme identifier), token._tokenKey (internal token cache key), token.themeId (ProAliasToken custom id)
  const stylePath = [
    componentName,
    hashId,
    (theme as any)?.id,
    (token as any)?._tokenKey,
    (token as any)?.themeId,
  ].filter(Boolean);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/provider/useStyle/index.ts` around lines 121 - 127, Add a brief inline
comment above the stylePath construction explaining each part of the cache key:
componentName (component-specific prefix), hashId (compiled/style hash), (theme
as any)?.id (documented unique theme id from `@ant-design/cssinjs`), (token as
any)?._tokenKey (internal cssinjs token key used to expire caches), and (token
as any)?.themeId (token's theme identifier defined on ProAliasToken); place this
comment near the stylePath declaration so future readers understand why each
field is included for cache invalidation and uniqueness.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/provider/useStyle/index.ts`:
- Around line 121-127: Add a brief inline comment above the stylePath
construction explaining each part of the cache key: componentName
(component-specific prefix), hashId (compiled/style hash), (theme as any)?.id
(documented unique theme id from `@ant-design/cssinjs`), (token as any)?._tokenKey
(internal cssinjs token key used to expire caches), and (token as any)?.themeId
(token's theme identifier defined on ProAliasToken); place this comment near the
stylePath declaration so future readers understand why each field is included
for cache invalidation and uniqueness.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f8cdfe6c-d8c5-4e2b-86b6-f03f0736605a

📥 Commits

Reviewing files that changed from the base of the PR and between 73a27ab and ae55fc4.

📒 Files selected for processing (1)
  • src/provider/useStyle/index.ts

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/provider/useStyle/index.ts (1)

119-127: 整体方案正确,能够解决主题切换时样式不刷新的问题。

通过将 stylePaththeme.idhashIdthemeId 关联,确保主题切换时触发样式重新注册,符合 PR 目标。

一个小建议:第 126 行对 themeId 的类型断言是多余的,因为 ProAliasToken 类型(第 48 行)已经定义了 themeId: number。可以简化为:

♻️ 可选优化
  const stylePath = [
    componentName,
    hashId,
    (theme as any).id,
    (token as any)?._tokenKey,
-   (token as any)?.themeId,
+   token.themeId,
  ].filter(Boolean);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/provider/useStyle/index.ts` around lines 119 - 127, The code builds
stylePath with an unnecessary type assertion for themeId; update the stylePath
construction to use token?.themeId (remove the (token as any)? cast) so it
relies on the declared ProAliasToken.themeId type—i.e., replace (token as
any)?.themeId with token?.themeId in the stylePath array (leave other casts
unchanged).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@src/provider/useStyle/index.ts`:
- Around line 119-127: The code builds stylePath with an unnecessary type
assertion for themeId; update the stylePath construction to use token?.themeId
(remove the (token as any)? cast) so it relies on the declared
ProAliasToken.themeId type—i.e., replace (token as any)?.themeId with
token?.themeId in the stylePath array (leave other casts unchanged).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9132358e-7345-4c17-a5c9-7cefbd1af9f4

📥 Commits

Reviewing files that changed from the base of the PR and between ae55fc4 and 839a986.

📒 Files selected for processing (1)
  • src/provider/useStyle/index.ts

@zhu0629 zhu0629 force-pushed the fix/issue-9373-theme-style-refresh branch from 839a986 to 351dd71 Compare March 6, 2026 13:50
@zhu0629 zhu0629 marked this pull request as draft March 6, 2026 13:52
@zhu0629 zhu0629 force-pushed the fix/issue-9373-theme-style-refresh branch from 1a95a83 to 76a1a02 Compare March 6, 2026 13:59
@zhu0629 zhu0629 changed the title fix(provider): re-register styles on theme/token changes in v3 feat(provider): enhance style registration with theme-sensitive path tracking Mar 6, 2026
@zhu0629 zhu0629 force-pushed the fix/issue-9373-theme-style-refresh branch from 76a1a02 to ddd18f1 Compare March 6, 2026 14:04
@zhu0629 zhu0629 changed the title feat(provider): enhance style registration with theme-sensitive path tracking fix(provider): avoid stale styles when toggling dark/light theme Mar 6, 2026
@zhu0629 zhu0629 marked this pull request as ready for review March 6, 2026 14:05
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@src/provider/useStyle/index.ts`:
- Around line 122-146: styleKey currently can't detect Pro token changes because
useStyle reads the finalToken from ProProvider (finalToken) which lacks the
internal _tokenKey; update useStyle to derive its key from the cached token
returned by useCacheToken (the value that contains _tokenKey) instead of the
finalToken so that (token as any)?._tokenKey becomes a real value, and ensure
stylePath/styleVersionRef/lastStyleKeyRef logic uses that cached token;
additionally extend the ProAliasToken/type definitions to include _tokenKey and
ensure theme.id is typed (remove as any casts) so changes to Pro token update
styleKey and trigger useStyleRegister correctly.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: aeb0a832-32cf-4ef0-9af6-00889d9b176a

📥 Commits

Reviewing files that changed from the base of the PR and between 351dd71 and ddd18f1.

📒 Files selected for processing (1)
  • src/provider/useStyle/index.ts

Comment on lines +122 to +146
const styleKey = [
hashId,
(theme as any).id,
(token as any)?._tokenKey,
(token as any)?.themeId,
]
.filter(Boolean)
.join('-');

const lastStyleKeyRef = useRef<string>('');
const styleVersionRef = useRef(0);
if (lastStyleKeyRef.current !== styleKey) {
styleVersionRef.current += 1;
lastStyleKeyRef.current = styleKey;
}

const stylePath = [componentName, styleKey, styleVersionRef.current].filter(
Boolean,
);

useStyleRegister(
{
theme: theme as any,
token,
path: [componentName],
path: stylePath,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Examining token flow and _tokenKey usage ==="
rg -n -C4 'const finalToken|useCacheToken<ProAliasToken>|token:\s*finalToken as any|_tokenKey|themeId' \
  src/provider/index.tsx src/provider/useStyle/index.ts

Repository: ant-design/pro-components

Length of output: 1878


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Checking ProConfigContext definition and token property type ==="
rg -n -B5 -A5 'createContext|ProConfigContext' src/provider/index.tsx | head -60

echo ""
echo "=== Checking useCacheToken return type and _tokenKey ==="
rg -n 'useCacheToken.*ProAliasToken' src/provider/index.tsx -A10 | head -40

Repository: ant-design/pro-components

Length of output: 2064


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Checking useStyle hook complete implementation ==="
sed -n '1,150p' src/provider/useStyle/index.ts | cat -n

Repository: ant-design/pro-components

Length of output: 5229


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Finding proConfigContextValue construction ==="
rg -n 'proConfigContextValue\s*=' src/provider/index.tsx -B5 -A20 | head -80

Repository: ant-design/pro-components

Length of output: 828


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Checking what useCacheToken returns (checking _tokenKey and typing) ==="
rg -n '_tokenKey|useCacheToken' src/provider/index.tsx -B2 -A2 | head -50

echo ""
echo "=== Checking ProAliasToken and related type definitions ==="
grep -n '_tokenKey\|themeId' src/provider/useStyle/index.ts src/provider/typing/*.ts 2>/dev/null || echo "Type file not found in expected location"

Repository: ant-design/pro-components

Length of output: 813


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Find complete ProProvider context value assignment ==="
sed -n '280,370p' src/provider/index.tsx | cat -n

Repository: ant-design/pro-components

Length of output: 2904


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Checking _tokenKey origin in cssinjs or antd ==="
rg -n '_tokenKey' --type ts --type tsx | head -30

echo ""
echo "=== Verify finalToken structure vs useCacheToken return ==="
rg -n 'finalToken|useCacheToken' src/provider/index.tsx | grep -E '(const |finalToken|useCacheToken)'

Repository: ant-design/pro-components

Length of output: 166


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Check type definitions in ProConfigContextValue ==="
rg -n 'ConfigContextPropsType|ProConfigContext' src/provider -B3 -A15 | head -100

Repository: ant-design/pro-components

Length of output: 4895


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Verify what token object should contain in type system ==="
rg -n 'type ProAliasToken|interface.*Token' src/provider/useStyle/index.ts -A10 | head -40

Repository: ant-design/pro-components

Length of output: 394


styleKey 无法真正依赖 Pro token 变化

useStyleProProvider context 获取的 token 实际是 finalToken(见 src/provider/index.tsx 第 347 行),而不是 useCacheToken 的返回值。因为 ProAliasToken 类型定义(useStyle/index.ts 第 46-54 行)中并不包含 _tokenKey 属性,所以第 125 行的 (token as any)?._tokenKey 在此上下文中必然为 undefined。这导致 stylePath 主要只依赖 hashIdtheme.id,无法覆盖"同一 theme 下仅 Pro token 更新"的场景。

建议改为传递 useCacheToken 返回的 token(该 token 包含 _tokenKey),或采用其他确保对 Pro token 变化敏感的稳定键。同时补充 _tokenKeytheme.id 等属性的类型定义,避免新增 as any 导致类型检查失效。

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/provider/useStyle/index.ts` around lines 122 - 146, styleKey currently
can't detect Pro token changes because useStyle reads the finalToken from
ProProvider (finalToken) which lacks the internal _tokenKey; update useStyle to
derive its key from the cached token returned by useCacheToken (the value that
contains _tokenKey) instead of the finalToken so that (token as any)?._tokenKey
becomes a real value, and ensure stylePath/styleVersionRef/lastStyleKeyRef logic
uses that cached token; additionally extend the ProAliasToken/type definitions
to include _tokenKey and ensure theme.id is typed (remove as any casts) so
changes to Pro token update styleKey and trigger useStyleRegister correctly.

@zhu0629 zhu0629 force-pushed the fix/issue-9373-theme-style-refresh branch from ddd18f1 to 20ca73d Compare March 6, 2026 14:26
@dosubot dosubot bot added size:M This PR changes 30-99 lines, ignoring generated files. and removed size:S This PR changes 10-29 lines, ignoring generated files. labels Mar 6, 2026
@zhu0629
Copy link
Copy Markdown
Contributor Author

zhu0629 commented Mar 6, 2026

@afc163 @chenshuai2144 Friendly ping: this PR fixes #9373 (dark/light theme toggle stale style issue in ) and has been locally verified with light -> dark -> light toggles.

Could you help review/merge when convenient? Thanks! 🙏

@zhu0629
Copy link
Copy Markdown
Contributor Author

zhu0629 commented Mar 6, 2026

Correction: this PR fixes #9373 (dark/light theme toggle stale style issue in provider/useStyle) and has been locally verified with light -> dark -> light toggles.

@afc163 @chenshuai2144 Could you help review/merge when convenient? Thanks! 🙏

@codecov
Copy link
Copy Markdown

codecov bot commented Mar 7, 2026

Codecov Report

❌ Patch coverage is 94.44444% with 1 line in your changes missing coverage. Please review.
✅ Project coverage is 91.64%. Comparing base (73a27ab) to head (20ca73d).
⚠️ Report is 4 commits behind head on master.

Files with missing lines Patch % Lines
src/provider/useStyle/index.ts 94.44% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #9538      +/-   ##
==========================================
- Coverage   91.68%   91.64%   -0.05%     
==========================================
  Files         309      309              
  Lines       11215    11233      +18     
  Branches     4179     4184       +5     
==========================================
+ Hits        10283    10295      +12     
- Misses        816      821       +5     
- Partials      116      117       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@chenshuai2144 chenshuai2144 merged commit fddaf14 into ant-design:master Mar 10, 2026
10 of 11 checks passed
@zhu0629 zhu0629 deleted the fix/issue-9373-theme-style-refresh branch March 11, 2026 09:21
@json-q
Copy link
Copy Markdown

json-q commented Mar 22, 2026

Hi,这种改动产生了一个新问题,每次主题切换都会插入一段全新的 style hash 样式,而不是将旧的 style hash 内容进行替换。如图:

image

补充:当 A 页面初次加载 ProComponents 组件时,切换主题会产生图中问题,但是主题切换正常生效。此时切换到 B 页面,再次切换回 A 页面,切换主题,不会再新插入 style 标签,同时主题显示异常

@leshalv
Copy link
Copy Markdown
Collaborator

leshalv commented Mar 23, 2026

Hi,这种改动产生了一个新问题,每次主题切换都会插入一段全新的 style hash 样式,而不是将旧的 style hash 内容进行替换。如图:

image 补充:当 A 页面初次加载 ProComponents 组件时,切换主题会产生图中问题,但是主题切换正常生效。此时切换到 B 页面,再次切换回 A 页面,切换主题,不会再新插入 style 标签,同时主题显示异常

Hi,这种改动产生了一个新问题,每次主题切换都会插入一段全新的 style hash 样式,而不是将旧的 style hash 内容进行替换。如图:

image 补充:当 A 页面初次加载 ProComponents 组件时,切换主题会产生图中问题,但是主题切换正常生效。此时切换到 B 页面,再次切换回 A 页面,切换主题,不会再新插入 style 标签,同时主题显示异常

提个PR吧

@json-q
Copy link
Copy Markdown

json-q commented Mar 24, 2026

提个PR吧

对 antd 的 cssinjs 不熟,可能无法帮上忙,不过我会尝试一下 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🧱 antd ⭕️ bug Something isn't working size:M This PR changes 30-99 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

👑 [需求]v3的切换亮色和暗色主题无法即时生效

4 participants