Material-ui: theme.spacingは、@ material-ui / [styles / core] 4.0.1の関数ではありません。

作成日 2019年05月31日  ·  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

コンテキスト🔦

まったく新しいアプリケーションを開始し、Material-UIのすべてのスタイル機能をまとめようとしています。 とは言うものの、 styleモジュールの4.0.1に移行する前は、そのような問題はなかったので、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コアとスタイルの違いに注意してください

@oliviertassinariに感謝します。

Material-UIスタイルは、@ material-ui / stylesnpmパッケージを利用しています。 これはReactのスタイリングソリューションです。 このソリューションは分離されており、デフォルトのMaterial-UIテーマに関する知識がありません。 Reactのコンテキストにテーマを体系的に挿入する必要をなくすために、スタイルモジュール(makeStyles、withStyles、styled)をデフォルトのMaterial-UIテーマでラップしています。

正直なところ、ここでは要点も、これが問題とどのように関連しているかについてもわかりません。 これは、 core/stylesからインポートするときにすでに出荷されているため、ThemeProviderが必要ないことを意味しますか?

追加のコンテキストを与えるために:私のコードは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/にあるのと同じ方法

騒音でごめんなさい!

https://material-ui.com/styles/xにあるものはすべて、マテリアルデザインとは無関係です。 これはReactのスタイリングソリューションです。

申し訳ありませんが、まだ理解できません。
スタイルへの引数としてthemeを送信し、それをwithstylesラップできますか? 次のように。

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

テーマをスタイルの引数として送信し、withstylesでラップできますか? 次のように。

@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 評価