React:在jsx中使用css样式面临问题

时间:2017-11-25 11:18:14

标签: javascript css reactjs webpack babel

我一直在尝试在我的React项目中使用外部css。我正在使用带有babel的webpack。我在我的项目中配置了css,js和jsx加载器。事实上,我的项目能够成功编译,但我无法在我的html上应用样式。

这是我的style-header.css文件:

.LogoMargin {
  margin-top: 10px;
  margin-left: 10px;
}

这是我的jsx文件,我想在其中使用css样式

import React,{Component} from 'react';
import { withStyles } from 'material-ui/styles';
import TextField from 'material-ui/TextField';
import logo from '../resources/images/logo.png';
import '../resources/style/style-header.css';

class Header extends Component {
  render () {
    return(
      <div>
        <span>
          <img className="LogoMargin" src={logo} height="60" width="200" alt="logo" />
        </span>
        <TextField
          id="search"
          label="Search"
          type="search"
          />
      </div>
    )
  }
}

export default Header;

这里是webpack配置文件:

var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  devtool: 'eval-source-map',
  entry:  __dirname + "/app/index.js",
  output: {
    path: __dirname + "/build",
    filename: "bundle.js"
  },

  module: {
    loaders: [
      {
        test: /\.(js|jsx)$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.css$/,
        exclude: /node_modules/,
        loader: 'css-loader'
      },
      {
        test: /\.(gif|png|jpe?g|svg)$/i,
        use: [
          'file-loader',
          {
            loader: 'image-webpack-loader',
            options: {
              bypassOnDebug: true,
            },
          },
        ]
      }
    ]
  },

  plugins: [
    new HtmlWebpackPlugin({
      template: __dirname + "/index.tmpl.html"
    }),
    new webpack.HotModuleReplacementPlugin()
  ],

  devServer: {
    historyApiFallback: true,
    inline: true,
    stats: {colors: true},
    hot: true
  }
}

2 个答案:

答案 0 :(得分:0)

您应该为webpack配置添加“style-loader”。您可以按如下方式在数组中提供它。另外,我在这个回购中有一个例子:

https://github.com/burakhanalkan/simple-react-materialui-app-starter/blob/master/webpack.config.js

{
   test: /\.css$/,
   use: [
        "style-loader",
        "css-loader"
   ]
 },

答案 1 :(得分:0)

我能够通过使用style-loader的答案提出解决这个问题,并且我对我的webpack配置文件进行了一些更改,如下所示:

test: /\.css$/,
exclude: /node_modules/,
use: [
  { loader: "style-loader" },
  { loader: "css-loader" ,
    query: {
      modules: true,
      localIdentName: '[name]__[local]___[hash:base64:5]'
    }}
]

但是我想知道当我使用创建React App 设置反应环境时,我可以在不使用css模块加载器的情况下使用样式。