javascript 为什么我的CSS不适用于我的React组件?

gtlvzcf8  于 2022-12-25  发布在  Java
关注(0)|答案(5)|浏览(202)

假设我正在创建一个React应用程序,并为组件添加了一些CSS,我已经将样式加载器和css-loader添加到了我的webpack配置中:

module.exports = {
  mode: 'development',
  entry: './client/index.js',
  module: {
    rules: [
    {
      test: /\.(js|jsx)$/,
      exclude: /node_modules/,
      use: {
          loader: 'babel-loader',
          options: { 
            presets: ['@babel/preset-react']
          }
      }
    }, {
      test: /\.css$/,
      loader: 'style-loader'
    }, {
      test: /\.css$/,
      loader: 'css-loader',
      query: {
        modules: true,
        localIdentName: '[name]__[local]___[hash:base64:5]'
      }
    }
    ]
  },
  resolve: {
    extensions: ['*', '.js', '.jsx']
  },
  output: {
    path: __dirname + '/dist',
    publicPath: '/',
    filename: 'bundle.js'
  },
  devServer: {
    contentBase: './dist'
  },
  devtool:"#eval-source-map"
};

我有一个简单的CSS文件,只是为了测试一个组件:

.list-group-item {
    border: 1px solid black;
    outline-style: solid;
    outline-color: red;
    outline-width: medium;
}

在我的应用程序中,我将类名应用于组件中的元素并导入CSS

import React, { Component } from 'react'
import { connect } from 'react-redux'
import selectContact from '../actions/action_select_contact'
import { bindActionCreators } from 'redux'
import '../styles.css';

class ContactList extends Component {
  renderList() {
    return this.props.contacts.map((contact) => {
      return (
        <li
          key={contact.phone}
          onClick={() => this.props.selectContact(contact)}
          className='list-group-item'>{contact.firstName} {contact.lastName}</li>
      );
    });
  }
  render() {
    return (
      <ul className = 'list-group col-sm-4'>
        {this.renderList()}
      </ul>
    );
  }
}

function mapStateToProps(state) {
  return {
    contacts: state.contacts
  };
}

function mapDispatchToProps(dispatch) {
  return bindActionCreators({ selectContact: selectContact }, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(ContactList)

我还以同样的方式将CSS文件导入ContactList组件本身。项目的其余部分是here。我本希望在我的contactsList周围看到一个轮廓,但没有。当我检查页面时,没有CSS。为什么没有应用它?

hgb9j2n6

hgb9j2n61#

在用create-react-appnpx create-react-app创建的react项目中,我也遇到了同样的问题。
我已将index. css文件导入到我的App Component中,但我的样式未正确应用到我的React Components。
我甚至尝试直接在public文件夹的html文件中添加index.css文件,并使用link标记链接到index.css文件(位于src文件夹中)。

<link rel="stylesheet" href="./../src/index.css">

那也不管用。
最后,我读了一篇关于7种将CSS应用到React中的方法的文章。其中一种最好的方法是将node-sass安装到我们的项目中,并在App Component中使用index.scss(import './index.scss')而不是index.css
万岁!!!我的CSS工作得很好,所有的媒体查询开始工作得很好。
下面是您可以尝试的代码片段。
x一个一个一个一个x一个一个二个x
要安装node-sass,只需执行npm install node-sass --save,然后将所有的**. css文件重命名为. scss**,这样您的项目就可以正常工作了。

    • package. json应添加node-sass**依赖项,如下所示:
"dependencies": {
    "node-sass": "^4.14.1",
    "react": "^16.8.3",
    "react-dom": "^16.8.3",
    "react-scripts": "2.1.5"
  },

希望这对很多开发者有帮助:)

lymnna71

lymnna712#

查看React组件也会很有帮助。
对于以下代码,您将className作为属性传递到组件中,而不是为其分配类:

export default class App extends Component {

  constructor(props) {
    super(props);
    this.state = {
      data: null
    };
  }

  render() {
    return (
      <div>
        /** This line specifically **/
        <ContactList className="contactList" />
        <ContactDetail />
        <AddContactModal />
      </div>
    );
  }
}

在组件内部,您需要对组件内部的常规HTML标记使用className={this.props.className},以便传递className。

e0uiprwp

e0uiprwp3#

您可以直接将特定的css文件添加到index.js中(如import './master.css')。

7kjnsjlb

7kjnsjlb4#

根据这里的react文档,className可以应用于所有DOM常规元素,如<div><a> ...
你的CSS可以和常规的标签<div className='contactList'>hello</div>一起使用吗?

envsm3lx

envsm3lx5#

这花了我一点时间,但是将下面的代码添加到public目录下的index.html对我来说是有效的。

<link rel="stylesheet" href="index.css" />

相关问题