So importieren Sie eine CSS-Datei in eine React-Komponente


95

Ich möchte eine CSS-Datei in eine Reaktionskomponente importieren.

Ich habe es versucht, import disabledLink from "../../../public/styles/disabledLink";aber ich erhalte den folgenden Fehler.

Modul nicht gefunden: Fehler: 'Datei' oder 'Verzeichnis' kann nicht aufgelöst werden ../../../public/styles/disabledLink in c: \ Benutzer \ Benutzer \ Dokumente \ pizza-app \ client \ src \ components @. /client/src/components/ShoppingCartLink.js 19: 20-66 Hash: 2d281bb98fe0a961f7c4 Version: webpack 1.13.2

C:\Users\User\Documents\pizza-app\client\public\styles\disabledLink.css ist der Speicherort der CSS-Datei, die ich laden möchte.

Mir scheint, dass der Import nicht den richtigen Weg sucht.

Ich dachte, ../../../damit würde der Pfad drei Ordnerebenen oben nachschlagen.

C:\Users\User\Documents\pizza-app\client\src\components\ShoppingCartLink.js ist der Speicherort der Datei, die die CSS-Datei importieren soll.

Was mache ich falsch und wie kann ich das beheben?


Hey, was ist
— los

Hey, du hast recht, aber es funktioniert immer noch nicht. Ich habe festgestellt, dass ich den Import nicht verwenden kann, da ich den Export innerhalb einer CSS-Datei nicht verwenden kann
— venter


Ich erhalte die Fehlermeldung -> @media only screen und (min-width: 320px) und (max-width: 640px) {^ SyntaxError: Ungültiges oder unerwartetes Token bei Module._compile (intern / modules / cjs / loader.js: 723) : 23)
— Sadanand

Antworten:


157

Sie müssen es nicht einmal benennen, wenn Sie nicht müssen:

z.B

import React from 'react';
import './App.css';

Ein vollständiges Beispiel finden Sie hier ( Erstellen eines JSX Live-Compilers als Reaktionskomponente ).


5
Funktioniert bei mir nicht, wenn ich versuche, Mokka mit Babel-Register auszuführen, erhalte ich ... I: \ .... css: 1 (Funktion (exportiert, erfordert, Modul, __Dateiname, __Dirnname) {.filter-bg {^ SyntaxError: Unerwartetes Token.
— JGleason

3
Oder verwenden Sie einen Reaktionshelm und injizieren Sie das CSS (falls es sich um eine URL handelt) in das <head> -Tag
— Kira

53

Sie müssen CSS-Loader verwenden, wenn Sie ein Bundle mit Webpack erstellen.

Es installieren:

npm install css-loader --save-dev

Und fügen Sie es den Ladern in Ihren Webpack-Konfigurationen hinzu:

module.exports = {
  module: {
    loaders: [
      { test: /\.css$/, loader: "style-loader!css-loader" },
      // ...
    ]
  }
};

Danach können Sie CSS-Dateien in js aufnehmen.


1
Ich darf kein anderes Modul in dieses Projekt importieren. Funktioniert ihre andere Lösung nur mit Reactjs oder nativen Js?
— Venter

Also ich denke , muss ich etwas wie folgt verwenden: HTMLElement.style
— Venter

Es sieht ein bisschen hässlich aus. Warum dürfen Sie beim Erstellen von Bundles keine Änderungen hinzufügen?
— Alexandr Lazarev

Es ist eine Nachbearbeitung für eine workship über reactjs und uns wurde gesagt , die Anforderungen mit den Modulen während workship enthalten zu lösen
— Venter

Ok, aber ich wollte nur erwähnen, dass das Abrufen von Stil-Tags keine CSS-Dateien importiert , wie Sie in Ihrer Frage gefragt haben. Dies sind zwei verschiedene Probleme.
— Alexandr Lazarev

31

Ich würde vorschlagen, CSS-Module zu verwenden:

Reagieren

import React from 'react';
import styles from './table.css';

export default class Table extends React.Component {
    render () {
        return <div className={styles.table}>
            <div className={styles.row}>
                <div className={styles.cell}>A0</div>
                <div className={styles.cell}>B0</div>
            </div>
        </div>;
    }
}

Rendern der Komponente:

<div class="table__table___32osj">
    <div class="table__row___2w27N">
        <div class="table__cell___2w27N">A0</div>
        <div class="table__cell___1oVw5">B0</div>
    </div>
</div>

Ich würde Teil 1 als Antwort unten hinzufügen. Und Sie können meiner Antwort folgen, um Ihre Komponente zu testen.
— Mihir Patel

2
Wenn dies ausprobiert wird und es nicht funktioniert. Ich habe versucht, es so import styles from "./disabledLink.css";einzuschließen : und erhalte den folgenden Fehler: Modul nicht gefunden: Fehler: 'Datei' oder 'Verzeichnis' ./disabledLink.css kann nicht in c: \ Users \ Basti Kluth \ Documents \ pizza-app aufgelöst werden \ client \ src \ components @ ./client/src/components/ShoppingCartLink.js 19: 20-49
— Venter

1
CSS-Module sollten getrennt installiert werden, github.com/css-modules/css-modules
— Alexandr Lazarev

1
Und wie kann ich eine Medienabfrage für einen solchen CSS-Typ schreiben?
— Sonu Bamniya

18

Im Folgenden wird eine externe CSS-Datei in eine React-Komponente importiert und die CSS-Regeln auf <head />der Website ausgegeben.

  1. Installieren Sie Style Loader und CSS Loader :
npm install --save-dev style-loader
npm install --save-dev css-loader
  1. In webpack.config.js:
module.exports = {
    module: {
        rules: [
            {
                test: /\.css$/,
                use: [ 'style-loader', 'css-loader' ]
            }
        ]
    }
}
  1. In einer Komponentendatei:
import './path/to/file.css';

Und ich benutze Babel, um Watcher zu betreiben. Vielleicht sieht es überhaupt nicht in die Datei webpack.config.js
— Anton Danilchenko

Haben Sie CSS-Loader installiert? Außerdem sehe ich Ihre webpack.config.js nicht.
— Webars

1
Sie können weitere Modulregeln im Objektformat als rulesArray-Wert hinzufügen .
— Ari

3

Die oben genannten Lösungen sind vollständig geändert und veraltet. Wenn Sie CSS-Module verwenden möchten (vorausgesetzt, Sie haben CSS-Loader importiert) und ich habe so lange versucht, eine Antwort darauf zu finden, und habe es schließlich getan. Der Standard-Webpack-Loader ist in der neuen Version ganz anders.

In Ihrem Webpack müssen Sie ein Teil finden, das mit cssRegex beginnt, und es durch dieses ersetzen.

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


2

Mit CSS-Modulen können Sie denselben CSS-Klassennamen in verschiedenen Dateien verwenden, ohne sich Gedanken über Namenskonflikte machen zu müssen.

Button.module.css

.error {
  background-color: red;
}

another-stylesheet.css

.error {
  color: red;
}

Button.js

import React, { Component } from 'react';
import styles from './Button.module.css'; // Import css modules stylesheet as styles
import './another-stylesheet.css'; // Import regular stylesheet
class Button extends Component {
  render() {
    // reference as a js object
    return <button className={styles.error}>Error Button</button>;
  }
}

1
  1. Installieren Sie Style Loader und CSS Loader:

    npm install --save-dev style-loader
    npm install --save-dev css-loader
    
  2. Webpack konfigurieren

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

0

In Fällen, in denen Sie nur einige Stile aus einem Stylesheet in eine Komponente einfügen möchten, ohne das gesamte Stylesheet zu bündeln, empfehle ich https://github.com/glortho/styled-import . Zum Beispiel:

const btnStyle = styledImport.react('../App.css', '.button')

// btnStyle is now { color: 'blue' } or whatever other rules you have in `.button`.

HINWEIS: Ich bin der Autor dieser Bibliothek und habe sie für Fälle erstellt, in denen Massenimporte von Stilen und CSS-Modulen nicht die beste oder praktikabelste Lösung sind.


0

Sie können auch das gewünschte Modul verwenden.

require('./componentName.css');
const React = require('react');

0

Die Verwendung von extract-css-chunks-webpack-plugin und css-loader loader funktioniert für mich, siehe unten:

webpack.config.js Importiere das Extrakt-CSS-Chunks-Webpack-Plugin

const ExtractCssChunks = require('extract-css-chunks-webpack-plugin');

webpack.config.js Fügen Sie die CSS-Regel hinzu . Extrahieren Sie zuerst CSS-Chunks, dann bettet der CSS-Loader CSS-Loader sie in das HTML-Dokument ein. Stellen Sie sicher, dass sich CSS-Loader und Extract-CSS-Chunks-Webpack-Plugin in package.json dev befinden Abhängigkeiten

rules: [
      {
        test: /\.css$/,
        use: [
          {
            loader: ExtractCssChunks.loader,
          },
          'css-loader',
        ],
      }
]

webpack.config.js Instanz des Plugins erstellen

plugins: [
    new ExtractCssChunks({
      // Options similar to the same options in webpackOptions.output
      // both options are optional
      filename: '[name].css',
      chunkFilename: '[id].css'
    })
  ]

Und jetzt ist das Importieren von CSS möglich. Und jetzt kann ich in einer tsx-Datei wie index.tsx den Import wie diesen Import './Tree.css' verwenden, wobei Tree.css CSS-Regeln wie enthält

body {
    background: red;
}

Meine App verwendet Typoskript und dies funktioniert für mich. Überprüfen Sie mein Repo auf die Quelle: https://github.com/nickjohngray/staticbackeditor


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.