Стили класса Class не работают в реакции

У меня небольшая проблема с компоновкой элементов оформления. У меня есть таблицы стилей scss в отдельном файле и импортирование их в файл ответов. Мой scss-стиль выглядит следующим образом:

.testStyle {
  font-family: avenir;
  color: blue;
}

Мой файл реакции выглядит следующим образом:

import React from 'react'

import styles from '../styles/main.scss'

class Temp extends React.Component {
  render() {
    return (
      **<div className={styles.testStyle}>**
        <h1>Hello</h1>
      </div>
    )
  }
}

export default Temp

С помощью этой настройки мои стили не пройдены, однако, если она работает, если я заменю выделенную строку на <div className='testStyle'>, так что кажется, что стили импортируются правильно. Может кто-нибудь помочь с этим? Спасибо.

Ответ 1

Я полагаю, вы используете загрузчик CSS в своем веб-пакете. Вам необходимо включить модули: true

{
  loader: 'css-loader',
  options: { 
    modules: true
  }
}

Если вы не хотите, чтобы это поведение было по умолчанию, в вашем (-их) CSS вы можете использовать:

// sCSS
:local .yourClass {...}

// JS

import cls from '../yourCss.scss'

const Component = () => (
  <div className={cls.yourClass} />
)

// yourClass will become some random hash
// or something else based on your css loader config

чтобы его обработали. Если у вас есть модули: true и вы не хотите, чтобы css loader компилировал ваш класс, вы можете использовать

// CSS
:global .yourGlobalClass {...}

// JS
import '../yourCss.scss'

const Component = () => (
  <div className="yourGlobalClass" />
)

См. Документацию: https://github.com/webpack-contrib/css-loader и https://github.com/css-modules/css-modules.

Ответ 2

Импорт таблицы стилей просто скажет Webpack или другим инструментам сборки обрабатывать эту таблицу стилей и включать ее в выходные файлы. Он, насколько мне известно, не позволяет вам использовать шаблон JSX. Таким образом, просто импортируя его, ваши стили будут доступны после цикла сборки. Вам не нужно использовать его каким-либо образом.

className берет строку и непосредственно переводит на html class - поэтому используйте ее так.

Ответ 3

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

Я рекомендую отказаться от sass и использовать postcss, он обширный и работает так, как вы используете классы в коде выше.

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

Ответ 4

enter image description hereit very simple, just run command "npm run eject" It moves create-react-apps configuration files and dev/build/test scripts into you app directory.

now go to config folder and open 'webPackConfig.js' file and add the following code

          use: getStyleLoaders({
              ....
              ....
            modules:true,
            getLocalIdent:getCSSModuleLocalIdent,
            localIdentName: '[name]_[local]_[hash:base64:5]'
          })
example:

import React from 'xyz';
import Logo from './Logo/Logo';

import classes from './Toolbar.css';
import NavigationItems from './NavigationItems';
import DrawerToggle from './DrawerToggle/DrawerToggle';

const toolbar = (props) => (
    <header className={classes.Toolbar}>
        <DrawerToggle clicked={props.DrawerToggleClicked}/>
        <div className={classes.Logo}>
            <Logo />
        </div>
    <nav className={classes.DesktopOnly}>
        <NavigationItems />
    </nav>
    </header>
);
export default toolbar;
try this and you can definitely solve your issue

Ответ 5

/* loginScreen.js */

import React, { Component } from 'react';
import './styles.css'

class loginScreen extends Component {
  render() {
    return (
      <div className={ 'form' }>

      </div>
    );
  }
}

export default loginScreen;

Ответ 6

Попробуйте переименовать расширение имени файла .scss в .module.scss

Если есть проблема в sass-loader или вы не настроили его для поддержки файлов .scss - его оригинальный формат scss будет поддерживать только расширение .module.scss.

У меня была та же проблема, и она исправила мою проблему.

Вы также можете проверить здесь вопрос, который я задавал.

Ответ 7

Я полагаю, это может быть связано с тем, что некоторые конфиги Webpack "хешируют" классы, поэтому ваш код должен выглядеть примерно так:

import React from 'react'

import * as  styles from '../styles/main.scss'

const selectors = styles as any;

class Temp extends React.Component {
  render() {
    return (
      **<div className={selectors.testStyle}>**
        <h1>Hello</h1>
      </div>
    )
  }
}

Посмотрите, поможет ли это.