Material-ui: theme.spacing не является функцией @ material-ui / [styles / core] 4.0.1

Созданный на 31 мая 2019  ·  18Комментарии  ·  Источник: mui-org/material-ui

Пытаясь исправить еще одну проблему сегодня, я попытался сбросить все мое рабочее пространство Material-UI 4.0.0, перенеся и ядро, и стиль на последнюю версию 4.0.1.

Как только я пытаюсь использовать ThemeProvider я получаю TypeError theme.spacing is not a function .

  • [x] Это не проблема v0.x.
  • [x] Я искал проблемы в этом репозитории и считаю, что это не дубликат. Ну ... не совсем ... Я нашел дубликат на https://github.com/mui-org/material-ui/issues/15834, но исправление, похоже, не работает, похоже, что неправильное использование находится в ядре

Ожидаемое поведение 🤔

Просто хочу увидеть, как работает тематика. Меня смущает тот факт, что theme.spacing похоже, используется как основной, так и следующей ветвями, так что, похоже, это правильный путь.

Текущее поведение 😯

См. Ошибку выше

Шаги по воспроизведению 🕹

Ссылка: https://codesandbox.io/s/materialui-style-issue-rk8n0

Контекст 🔦

Я запустил совершенно новое приложение, и я пытаюсь понять все особенности стиля Material-UI. Тем не менее, до перехода на 4.0.1 модуля style меня не было таких проблем, поэтому я не уверен, являются ли выпуски 4.x нестабильными или что-то еще.

Ваше окружение 🌎

| Технология | Версия |
| -------------- | --------- |
| Материал-UI | v4.0.1 |
| React | 16.0.6 |
| Браузер | FF / Chrome последняя версия |
| TypeScript | - |

question

Самый полезный комментарий

Извините, я обнаружил проблему.
Я меняю import { withStyles } from '@material-ui/styles'; на import { withStyles } from '@material-ui/core/styles'; и все работает нормально.
Благодаря!

Все 18 Комментарий

@keul Обратите внимание на разницу между ядром и стилями: https://material-ui.com/customization/default-theme/#material -ui-core-styles-vs-material-ui-styles.

Спасибо @oliviertassinari.

Стили Material-UI основаны на пакете npm @ material-ui / styles. Это стилизованное решение для React. Это решение изолировано, оно не знает темы Material-UI по умолчанию. Чтобы устранить необходимость систематического внедрения темы в контекст React, мы обертываем модули стиля (makeStyles, withStyles и styled) с помощью темы Material-UI по умолчанию.

Честно говоря, я не понимаю ни сути, ни того, как это связано с проблемой. Это означает, что мне не нужен ThemeProvider, потому что он уже отправлен при импорте из core/styles ?

Просто чтобы дать дополнительный контекст: мой код работал с использованием core 4.0.0 и styles 3.0.0-alpha.10
У меня возникла проблема сегодня утром после перехода на 4.0.1

Я могу быстро вернуться к старой версии с блокировкой пакетов, но я хотел бы получить общую картину

@keul Хорошо, может быть, будет понятнее следующее. Вы вводите новую тему, несовместимую с основными компонентами. Вам следует использовать createMuiTheme.

import { createMuiTheme } from "@material-ui/core";

const theme = createMuiTheme({
  spacing: 4,
  palette: {
    primary: {
      main: "#007bff",
    },
  }
});

@oliviertassinari ну ... спасибо. Это устранило проблему.

Я почти уверен, что скопировал этот необработанный код из документации, это тот же способ, который я нашел на https://material-ui.com/styles/advanced/. Как новый пользователь (в прошлый раз, когда я использовал MUI, это была версия 0.x), это не совсем понятно, но мне, вероятно, придется уделить этому время.

Простите за шум!

Все, что находится на https://material-ui.com/styles/x, не имеет отношения к Material Design. Это стилизованное решение для React.

Извините, я все еще не понимаю.
Можно ли отправить theme в качестве аргумента стилям и обернуть его withstyles ? Как следующее.

const styles = theme => {({
    root: {
      // JSS uses px as the default units for this CSS property.
      padding: theme.spacing(2), // = 8 * 2
    },
})};

Можем ли мы отправить тему в качестве аргумента стилям и обернуть ее с помощью стилей? Как следующее.

@ByronHsu Да, если вы импортируете из @material-ui/core/styles или если вы вводите тему, созданную с помощью createMuiTheme() .

Но он возвращает theme.spacing не является функцией.

@ByronHsu У вас есть репродукция?

Извините, я обнаружил проблему.
Я меняю import { withStyles } from '@material-ui/styles'; на import { withStyles } from '@material-ui/core/styles'; и все работает нормально.
Благодаря!

У меня тоже возникла эта проблема, и я использую

import { makeStyles, Theme } from "@material-ui/core/styles";

const useStyles = makeStyles((theme: Theme) => ({
  icon: {
    marginRight: theme.spacing(1)
  }
}));

Этот компонент заключен в <ThemeProvider />

Такая же проблема возникает, если я вместо этого использую:

import { makeStyles } from "@material-ui/styles";
import { Theme } from "@material-ui/core/styles";

const useStyles = makeStyles((theme: Theme) => ({
  icon: {
    marginRight: theme.spacing(1)
  }
}));

Я получил:

TypeError: theme.spacing is not a function

Все пакеты MUI обновлены, основная ветка.

Неважно, ошибка новичка. Я забыл обернуть свою новую тему в createMuiTheme - вместо этого я возвращал базовый объект.

тоже самое

Я вижу эту проблему, если делаю все, как ожидалось, кроме кода для внешней темы, когда ее нет. Например:

перерывы:

<MuiThemeProvider theme={outer => ({...outer, ...theme})}>...</MuiThemeProvider>

работает:

<MuiThemeProvider>
  <MuiThemeProvider theme={outer => ({...outer, ...theme})}>...</MuiThemeProvider>
</MuiThemeProvider>

Вижу, для этого случая есть предупреждение. Кажется, что он все равно должен работать или, по крайней мере, оставить эту логику предоставленной функции.

идти от
marginRight: theme.spacing(1)

измените это на
marginRight: theme.spacing.unit

Для меня это тоже проблема. Кажется, это ошибка типа, потому что я регистрирую само значение, и оно работает, но next.js выдает ошибку, говоря, что его не существует. Точки останова тоже.

Извините, я обнаружил проблему.
Я меняю import { withStyles } from '@material-ui/styles'; на import { withStyles } from '@material-ui/core/styles'; и все работает нормально.
Благодаря!

Спасибо @ByronHsu

работает

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

ryanflorence picture ryanflorence  ·  3Комментарии

chris-hinds picture chris-hinds  ·  3Комментарии

reflog picture reflog  ·  3Комментарии

pola88 picture pola88  ·  3Комментарии

activatedgeek picture activatedgeek  ·  3Комментарии