Skip to content

Commit 7d3036e

Browse files
committed
feat(theme): memoize context value
1 parent 911ba99 commit 7d3036e

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

electron/renderer/context/theme.tsx

+8-4
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
import type { EuiThemeColorMode } from '@elastic/eui';
55
import { EuiProvider } from '@elastic/eui';
66
import type { ReactNode } from 'react';
7-
import { createContext, useEffect, useState } from 'react';
7+
import { createContext, useEffect, useMemo, useState } from 'react';
88
import { getThemeName, setThemeName } from '../lib/theme.js';
99

1010
/**
1111
* React context for storing theme-related data and callbacks.
1212
* Color mode is usually either 'light' or 'dark'.
1313
*/
1414
export interface ThemeContextValue {
15-
colorMode?: EuiThemeColorMode;
16-
setColorMode?: (colorMode: EuiThemeColorMode) => void;
15+
colorMode: EuiThemeColorMode;
16+
setColorMode: (colorMode: EuiThemeColorMode) => void;
1717
}
1818

1919
/**
@@ -51,8 +51,12 @@ export const ThemeProvider: React.FC<ThemeProviderProps> = (
5151
setThemeName(colorMode);
5252
}, [colorMode]);
5353

54+
const contextValue = useMemo((): ThemeContextValue => {
55+
return { colorMode, setColorMode };
56+
}, [colorMode]);
57+
5458
return (
55-
<ThemeContext.Provider value={{ colorMode, setColorMode }}>
59+
<ThemeContext.Provider value={contextValue}>
5660
<EuiProvider colorMode={colorMode}>{children}</EuiProvider>
5761
</ThemeContext.Provider>
5862
);

0 commit comments

Comments
 (0)