Реакция: импорт имени класса CSS не работает

У меня есть div <main> в моем реагирующем компоненте, и я импортирую какое-то имя класса из файла класса css, но имя класса не интегрируется в основной div, когда я пытаюсь проверить его в браузере. когда я просто использую другие имена классов, он работает как <main className = "test">, но импорт классов не работает.

Это моя составляющая:

import React from 'react';
import Aux from '../../hoc/Aux';
import classes from './Layout.css';

const layout = (props) => (
<Aux>
    <div>
        Test paragraph
    </div>
    <main className = {classes.Content}>
        {props.children}

    </main>
</Aux>
);

export default layout;

Это мой css

.Content{
   color: red;
   margin-top: 20px;
}

Я выполнил команду npm run eject после создания, если что-то связано с файлом конфигурации веб-пакета, пожалуйста, помогите мне (я не внес никаких изменений после команды извлечения)

Вот часть css конфигурационного файла webpack dev

{
        test: cssRegex,
        exclude: cssModuleRegex,
        use: getStyleLoaders({
          importLoaders: 1,
        }),
      },
      // Adds support for CSS Modules (https://github.com/css-modules/css-modules)
      // using the extension .module.css
      {
        test: cssModuleRegex,
        use: getStyleLoaders({
          importLoaders: 1,
          modules: true,
          getLocalIdent: getCSSModuleLocalIdent,
        }),
 },
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
11
0
12 752
15

Ответы 15

Разве вам не нужно указывать расширение файла, например import classes from './layout.css';?

Попробуйте установить пакеты style-loader и css-loader. Затем добавьте в свой веб-пакет это:

{
    test: /\.css$/,
    loaders: [
        'style-loader?sourceMap',
        'css-loader?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]'
    ]
}

Я получил его от документация по css-модулям, и я надеюсь, что он поможет вам достичь того, что вам нужно.

Вы хоть пробовали? Это действительно не так уж и умно. Например, когда вы импортируете файл SVG, вам необходимо указать расширение файла.

sbqq 01.12.2018 16:36

Я попытался включить расширение, но все еще не работал "импорт классов из './Layout.css';"

Shamseer Ahammed 01.12.2018 16:40

Я использовал приложение create-response-app для создания структуры папок и использования npm run eject, так что они не (style-loader и css-loader установлены и настроены из коробки), или я должен снова включить это в файл конфигурации?

Shamseer Ahammed 01.12.2018 16:56

import './Layout.css';

Затем используйте его как обычный CSS

<main className = "Content">

Вы также можете использовать свои классы как объекты в этом формате:

В вашем файле CSS:
Оберните свои классы и идентификаторы в :local(.className)

Пример
:local(.Content) { width: 100px; }

В вашем компоненте React:
import classes from './stylesheet.css'

<div className = {classes.Content}></div>

ух ты!! Он работает, спасибо, чувак. Я думал, что мне еще нужно использовать его с реквизитом.

Shamseer Ahammed 01.12.2018 16:59

Рад, что смог помочь. Напомним, что при переходе от разработки к производству возникает проблема с учетом регистра. Это источник огромного разочарования, если вы не знаете, что ищете.

Chimera.Zen 01.12.2018 17:02

Просто будьте осторожны, потому что, когда вы импортируете файл css таким образом, ваши классы css становятся глобальными. Поэтому будьте осторожны, если вы захотите использовать класс с именем Content где-нибудь еще в коде, потому что он будет применять стили из этого класса.

sbqq 01.12.2018 17:20

Возвращаясь к этому вопросу: я не могу использовать этот синтаксис: <main className = {classes.Content}> для правильного получения классов из файлов css, мне нужно сделать это таким образом, как мне это сделать? Есть что-то, что у меня есть что делать с "npm eject" штукой?

Shamseer Ahammed 03.12.2018 10:01

У вас есть два пакета, предложенные sebinq?

Chimera.Zen 03.12.2018 10:14
codeburst.io/4-four-ways-to-style-react-components-ac6f323da‌ 822 # 3 - это то, что вы ищете. Это то же самое, что говорил Себинк
Chimera.Zen 03.12.2018 10:18

Я все еще не могу использовать свои классы как <main className = {classes.Content}>, я включил конфигурацию загрузчика в свой файл конфигурации wbpack, но все еще бесполезен.

Shamseer Ahammed 08.12.2018 15:23

Проверьте мой новый ответ. Не нужно ничего особенного, кроме небольшого изменения в вашем файле css

Chimera.Zen 08.12.2018 15:24

Используйте этот метод для глобального css и новый ответ для css для конкретных компонентов

Chimera.Zen 08.12.2018 15:29

Чтобы использовать имена классов как объекты, вам нужно сделать 2 вещи:

  1. Напишите импорт как import * as classes from './Layout.css';
  2. Включите определение набора текста для вашего стиля.

Пример для Typescript - создайте файл Layout.css.d.ts с export const Content: string;

Убедитесь, что вы определили опцию camelCase для css-loader, чтобы разрешить тире-классы в свойства верблюжьего регистра, которые вы определяете в Layout.css.d.ts.

На самом деле я использовал это так:

import classes from './Layout.module.css';

Как вы видите в тексте вашего вопроса:

// using the extension .module.css

Правильный ответ. В новых версиях это работает, если Вы используете расширение "module.css" вместо ".css"

Gennady G 20.05.2020 20:30

Вам нужно настроить некоторые кадры. Следуй этим шагам:

  1. npm run eject запустите эту команду в корневом каталоге вашего проекта.
  2. найдите cssRegex и добавьте следующие строки в use: getStyleLoaders({

        modules:true,
        localIdentName:'[name]__[local]__[hash:base64:5]'
    

Наслаждаться!

Я также работал над учебником по реагированию и столкнулся с той же проблемой.

Я обновил свой файл webpack.config.js в строке 420, и тогда он работал у меня. Пожалуйста, попробуйте.

строка 420:

  • localIdentName: '[имя] [местный] [hash: base64: 5]',

Убедитесь, что команда 'npm run eject' запущена успешно, после чего вы сможете получить доступ к файлу webpack.config.js в папке config.

  1. Остановите сервер.
  2. Перейдите в webpack.config.js
  3. Найдите cssRegex и обновите, как показано на изображении webpack.config.js
  4. Перезагрузите сервер

Вот решение:

yarn run eject

Заходим в config / webpack.config.js

Обновите файл как снимок экрана.

            // "postcss" loader applies autoprefixer to our CSS.
            // "css" loader resolves paths in CSS and adds assets as dependencies.
            // "style" loader turns CSS into JS modules that inject <style> tags.
            // In production, we use MiniCSSExtractPlugin to extract that CSS
            // to a file, but in development "style" loader enables hot editing
            // of CSS.
            // By default we support CSS Modules with the extension .module.css
            {
              test: cssRegex,
              exclude: cssModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
                modules: true,
                localIdentName:'[name]__[local]__[hash:base64:5]',
              }),
              // Don't consider CSS imports dead code even if the
              // containing package claims to have no side effects.
              // Remove this when webpack adds a warning or an error for this.
              // See https://github.com/webpack/webpack/issues/6571
              sideEffects: true,
            },
            // Adds support for CSS Modules (https://github.com/css-modules/css-modules)
            // using the extension .module.css
            {
              test: cssModuleRegex,
              use: getStyleLoaders({
                importLoaders: 1,
                sourceMap: isEnvProduction && shouldUseSourceMap,
                modules: true,
                getLocalIdent: getCSSModuleLocalIdent
              }),
            },

Если вы используете Windows, не называйте файл «Aux», это зарезервированное имя.

Решение - просто назвать ваши файлы CSS как (в вашем случае) Layout.module.css, а затем импортировать их как таковые.

Вам не нужно извлекать, как из Создать приложение React 2.0, поскольку он использует модули CSS из коробки.

Пятно на. :-) :-)

ban-geoengineering 12.02.2021 13:49

Для последней версии не нужно устанавливать

localIdentName: '[name] [местный] [hash: base64: 5]', // не нужно указывать где

Просто укажите свое имя css с постфиксом, например FileName.module.css ex Personal.module.css

Затем имя класса, как показано ниже filename_classname_randomstring

Personal_Person__3L9tz

это работает для меня

это работает для меня

{
          test: cssRegex,
          exclude: cssModuleRegex,
          use: getStyleLoaders({
            importLoaders: 1,
            sourceMap: isEnvProduction && shouldUseSourceMap,
          modules: {
                localIdentName: '[name]__[local]___[hash:base64:5]'
            }

}

другие ответы не сработали для меня поэтому я использовал это решение и отлично работал

1: запустите команду npm run eject

2: перейдите к config/webpack.config.js и найдите cssRegex

3: используйте этот код в этом конкретном разделе

test: cssRegex,
exclude: cssModuleRegex,
use: getStyleLoaders({
  importLoaders: 1,
  modules:{
    localIdentName:'[name]__[local]__[hash:base64:5]'
  },
}),

Просто добавьте приведенную ниже конфигурацию в config / webpack.config.js после запуска npm run eject в командной строке в папке проекта и выберите «Да», когда это будет предложено.

Я заметил много ссылок на блок test: cssRegex, хотя у вас его может не быть в конфигурации webpack. Если это ваш случай, попробуйте открыть webpack.config.dev.js и найти блок, начинающийся с test: /\.css$/, (строка 160 в моем случае). Затем добавьте следующие строки, чтобы окончательный результат выглядел так:

  {
    test: /\.css$/,
    use: [
      require.resolve('style-loader'),
      {
        loader: require.resolve('css-loader'),
        options: {
          importLoaders: 1,
          modules: true,
          localIdentName: '[name]__[local]__[hash:base64:5]'
      },
   },

Это должно позволить модулям css работать.

Ни одно из вышеперечисленных решений не помогло мне, если вы используете версию реакции с [email protected] и выше, они, вероятно, не будут работать и для вас.

вы должны использовать модули CSS вместе с обычными таблицами стилей, используя соглашение об именах файлов [name] .module.css. Модули CSS позволяют определять область действия CSS путем автоматического создания уникального имени класса в формате [имя файла] _ [имя класса] __ [хэш].

пример Header.module.css nb: заголовок здесь может быть любым

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