У меня есть приложение React, созданное с помощью Create React App, и я использую пакет @ material-ui / core npm для тем.
Для настройки компонентов я использую компонент высшего порядка withStyles, предоставляемый MaterialUI .
Согласно документации он поддерживает вложенные ThemeProviders https://material-ui.com/customization/theming/#nesting -the-theme .
Но внутри дочернего ThemeProvider withStyles классы применяться не будут.
Вот базовое c приложение, демонстрирующее проблему -> https://codesandbox.io/s/vibrant-tree-eh83d
ExampleComponent.tsx
import React, { FunctionComponent } from "react";
import {
WithStyles,
withStyles,
createStyles,
StepButton,
Step,
Stepper,
Box
} from "@material-ui/core";
const styles = createStyles({
button: {
"& .MuiStepIcon-root.MuiStepIcon-active": {
fill: "red"
}
}
});
interface Props extends WithStyles<typeof styles> {
title: string;
}
const ExampleComponent: FunctionComponent<Props> = ({ title, classes }) => {
console.log(title, classes);
return (
<Box display="flex" alignItems="center">
<span>{title}</span>
<Stepper activeStep={0}>
<Step>
<StepButton className={classes.button}>Test</StepButton>;
</Step>
</Stepper>
</Box>
);
};
export default withStyles(styles)(ExampleComponent);
App.tsx
import * as React from "react";
import { ThemeProvider, createMuiTheme } from "@material-ui/core";
import ExampleComponent from "./ExampleComponent";
const theme = createMuiTheme();
function App() {
return (
<ThemeProvider theme={theme}>
<ExampleComponent title="Root" />
<ThemeProvider theme={theme}>
<ExampleComponent title="Nested" />
</ThemeProvider>
</ThemeProvider>
);
}
export default App;
Внутри ExampleComponent I console.log сгенерированного объекта классов.
Я хочу использовать вложенные ThemeProviders и переопределять классы внутри компонентов независимо от ThemeProvider. Я что-то упустил или это невозможно?