Material-UI React: глобальное переопределение темы для компонента Paper

У меня есть приложение React, созданное с использованием последней библиотеки компонентов Material-UI.

Я использую много экземпляров компонента Paper. Я хочу применить поля и отступы ко всем сразу, не повторяя этот процесс для каждого экземпляра вручную.

Я просмотрел Документация по Material-UI по этой теме, и, насколько я могу судить, следующий код должен правильно переопределяет внешний вид Paper:

const theme = createMuiTheme({
    overrides: {
        Paper: {
            root: {
                padding: '10px',
                marginBottom: '10px',
            },
        },
    },
});

Ниже показано, где применяется переопределенный стиль должен:

<ThemeProvider theme = {theme}>
    {/* ... */}
    <Paper>
        Content goes here
    </Paper>
    {/* ... */}
</ThemeProvider>

Но переопределенные значения не применяются. Есть предложения относительно того, что происходит?

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
5
0
6 715
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

в вашем App.js добавить (обратите внимание на MuiPaper, а не на Paper):

const theme = createMuiTheme({
  overrides: {
    MuiPaper: {
      root: {
        padding: '10px',
        marginBottom: '10px'
      },
    },
  }
});

в том же файле App.js оберните свой HTML:

class App extends Component {
  render() {
    return (
      <MuiThemeProvider theme = {theme}>
        <div className = "App">
          <YourComponent1 />      
          <YourComponent2 />
          ...
        </div>
      </MuiThemeProvider>
    );
  }
}

таким образом, любой компонент Paper, отображаемый React, будет иметь ваш CSS.

Кстати, я создал модуль Схемы MUI, который добавляет поддержку пользовательского интерфейса материала, автоматически генерирует несколько компонентов пользовательского интерфейса материала и добавляет общие правила темы в App.js. Приглашаем вас взглянуть / попробовать ...

Я обнаружил проблему.

Имя внутреннего компонента, используемое для CSS, - MuiPaper, а не просто Paper. Следующее дает желаемый результат:

overrides: {
    MuiPaper: {
        root: {
            padding: '10px',
            marginBottom: '10px',
        },
    },
},

Вы также можете использовать свой компонент CssBaseline, если вы уже используете его для глобального сброса ... все зависит от того, как вы структурируете свою тему.

Например, ниже из документов Mui: <CssBaseline.js>

const theme = createMuiTheme({
  overrides: {
    MuiCssBaseline: {
      '@global': {
        html: {
          WebkitFontSmoothing: 'auto',
        },
      },
    },
  },
});
      

 // ...
return (
  <ThemeProvider theme = {theme}>
    <CssBaseline />
    {children}
  </ThemeProvider>
);

Вы можете получить более подробную информацию из документации здесь использование CssBaseline для внедрения глобальных переопределений темы.

Другие вопросы по теме