Skip to content

Commit 8669b88

Browse files
committed
🐛 fix: fix rerender with ThemeSwitcher
1 parent eb426b3 commit 8669b88

File tree

3 files changed

+18
-19
lines changed

3 files changed

+18
-19
lines changed

src/factories/createThemeProvider/AntdProvider.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,6 @@ const AntdProvider: FC<AntdProviderProps> = memo(
6767
},
6868
);
6969

70+
AntdProvider.displayName = 'AntdProvider';
71+
7072
export default AntdProvider;

src/factories/createThemeProvider/ThemeSwitcher.tsx

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FC, memo, ReactNode, useEffect, useLayoutEffect, useState } from 'react';
1+
import { FC, memo, ReactNode, useLayoutEffect, useState } from 'react';
22
import useMergeValue from 'use-merge-value';
33

44
import { ThemeModeContext } from '@/context';
@@ -120,16 +120,6 @@ const ThemeSwitcher: FC<ThemeSwitcherProps> = memo(
120120
matchBrowserPrefers('dark')?.matches ? 'dark' : 'light',
121121
);
122122

123-
const [startObserver, setStartObserver] = useState(false);
124-
125-
// Wait until after client-side hydration to show
126-
useEffect(() => {
127-
// 兼容 React18 的 Suspense 问题
128-
safeStartTransition(() => {
129-
setStartObserver(true);
130-
});
131-
}, []);
132-
133123
return (
134124
<ThemeModeContext.Provider
135125
value={{
@@ -141,17 +131,22 @@ const ThemeSwitcher: FC<ThemeSwitcherProps> = memo(
141131
browserPrefers,
142132
}}
143133
>
144-
{startObserver && (
145-
<ThemeObserver
146-
themeMode={themeMode}
147-
setAppearance={setAppearance}
148-
setBrowserPrefers={setBrowserPrefers}
149-
/>
150-
)}
134+
{
135+
// Wait until after client-side hydration to show
136+
typeof window !== 'undefined' && (
137+
<ThemeObserver
138+
themeMode={themeMode}
139+
setAppearance={setAppearance}
140+
setBrowserPrefers={setBrowserPrefers}
141+
/>
142+
)
143+
}
151144
{children}
152145
</ThemeModeContext.Provider>
153146
);
154147
},
155148
);
156149

150+
ThemeSwitcher.displayName = 'ThemeSwitcher';
151+
157152
export default ThemeSwitcher;

src/functions/createInstance.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createContext } from 'react';
1+
import { createContext, FC } from 'react';
22

33
import { CacheManager, createCSS, createEmotion, serializeCSS } from '@/core';
44

@@ -109,6 +109,8 @@ export const createInstance = <T = any>(options: CreateOptions<T>) => {
109109
useTheme,
110110
});
111111

112+
(ThemeProvider as FC).displayName = 'AntdStyleThemeProvider';
113+
112114
// ******** 上面这些都和主题相关,如果做了任何改动,都需要排查一遍 ************ //
113115
const { cx } = createCSS(emotion.cache, { hashPriority: internalOptions.hashPriority });
114116
const { injectGlobal, keyframes } = emotion;

0 commit comments

Comments
 (0)