Skip to content

Commit

Permalink
✨ feat: 支持嵌套Provider 后还能获得准确的 theme 值
Browse files Browse the repository at this point in the history
  • Loading branch information
arvinxx committed Jan 17, 2023
1 parent 7066c3d commit 8581665
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 5 deletions.
14 changes: 11 additions & 3 deletions src/containers/ThemeProvider/ThemeSwitcher.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { FC, memo, ReactNode, useCallback, useLayoutEffect } from 'react';
import { FC, memo, ReactNode, useCallback, useLayoutEffect, useMemo } from 'react';
import useControlledState from 'use-merge-value';

import { ThemeModeContext } from '@/context';
import { useTheme } from '@/hooks';
import { ThemeAppearance, ThemeMode } from '@/types';

let darkThemeMatch: MediaQueryList;
Expand Down Expand Up @@ -32,11 +33,18 @@ const ThemeSwitcher: FC<ThemeSwitcherProps> = memo(
appearance: appearanceProp,
defaultAppearance,
onAppearanceChange,
themeMode = 'light',
themeMode: themeModeProps,
}) => {
const { appearance: upperAppearance, themeMode: upperThemeMode } = useTheme();

const themeMode = useMemo(
() => themeModeProps ?? upperThemeMode,
[themeModeProps, upperThemeMode],
);

const [appearance, setAppearance] = useControlledState<ThemeAppearance>('light', {
value: appearanceProp,
defaultValue: defaultAppearance,
defaultValue: defaultAppearance ?? upperAppearance,
onChange: onAppearanceChange,
});

Expand Down
6 changes: 4 additions & 2 deletions tests/hooks/useTheme.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,13 @@ describe('useTheme', () => {
expect(result.current.stylish).toEqual({});
});

it('嵌套 Provider 后能拿到准确的值', () => {
it('嵌套 Provider 后能拿到准确的主题值', () => {
const Wrapper: FC<PropsWithChildren> = ({ children }) => {
return (
<ThemeProvider themeMode={'dark'}>
<ThemeProvider prefixCls={'kitchen'}>{children}</ThemeProvider>
<ThemeProvider defaultAppearance={'light'} prefixCls={'kitchen'}>
{children}
</ThemeProvider>
</ThemeProvider>
);
};
Expand Down

0 comments on commit 8581665

Please sign in to comment.