在我们的项目中,我们以 AngularJS 为核心,并且正在过渡到 React。在 React 方面,我们使用带有自定义主题的 Chakra UI。
加载 React 组件时,我们使用带有自定义主题的 ChakraProvider 包装组件,它看起来像这样:
<DesignProvider>
<FolderPermissionsIndicator {...props} />
</DesignProvider>
在哪里DesignProvider
:
import { ChakraProvider, ChakraProviderProps } from '@chakra-ui/react';
import * as React from 'react';
import { theme } from './theme';
import { useMemo } from 'react';
export const DesignProvider: React.FC<ChakraProviderProps> = props => {
const themeInstance = useMemo(() => theme, []);
return (
<div data-ds-next={true}>
<ChakraProvider resetCSS={false} {...props} theme={themeInstance} />
</div>
);
};
主题是:
const theme: ChakraTheme = extendTheme({
styles: {
global: {
...gigantic object...
}
}
});
现在,这很好用,但是如果我们将很多组件嵌入到 AngularJS 中,并且每个组件都单独包装,DesignProvider
事情就会变得越来越慢。特别是,合并全球主题定制需要一些时间。例如,如果我们global
从主题中删除对象,则页面加载一次可以从 ~20 秒到 ~500 毫秒。
一种解决方法当然是将那global
部分拉入一个 css 文件并全局加载它。不过,这种解决方案也有其自身的复杂性。
是否有更简单的方法可以在所有组件之间共享自定义主题?