Material-ui: theme.spacing ليس دالة مع @ material-ui / [styles / core] 4.0.1

تم إنشاؤها على ٣١ مايو ٢٠١٩  ·  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 غير مستقرة إلى حد ما أم ماذا.

بيئتك 🌎

| التقنية | الإصدار |
| -------------- | --------- |
| واجهة المستخدم المادية | الإصدار 4.0.1 |
| رد فعل | 16.0.6 |
| المستعرض | FF / Chrome الأحدث |
| تيبسكريبت | - |

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 / styles npm. إنه حل تصفيف لـ React. هذا الحل منفصل ، وليس لديه معرفة بموضوع Material-UI الافتراضي. لإزالة الحاجة إلى إدخال سمة في سياق React بشكل منهجي ، نقوم بلف وحدات النمط (makeStyles ، withStyles and 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 لا علاقة له بالتصميم متعدد الأبعاد. إنه حل تصفيف لـ 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 التقييمات