La pratique actuelle pour CSS avec les composants React semble utiliser le chargeur de style de webpack pour le charger dans la page.
import React, { Component } from 'react';
import style from './style.css';
class MyComponent extends Component {
render(){
return (
<div className={style.demo}>Hello world!</div>
);
}
}
En faisant cela, le chargeur de style injectera un <style>
élément dans le DOM. Cependant, le <style>
ne sera pas dans le DOM virtuel et donc si vous effectuez un rendu côté serveur, le <style>
sera omis. Cela fait que la page a FOUC .
Existe-t-il d'autres méthodes de chargement modules CSS qui fonctionnent à la fois côté serveur et côté client?
Vous pouvez jeter un œil au chargeur de style isomorphe . Le chargeur a été spécialement créé pour résoudre ce type de problèmes.
Cependant, pour l'utiliser, vous devez utiliser une méthode _insertCss()
fournie par le chargeur. La documentation détaille comment l'utiliser.
J'espère que cela a aidé.
Vous pouvez utiliser webpack/extract-text-webpack-plugin
. Cela créera une feuille de style redistribuable indépendamment que vous pourrez ensuite référencer à partir de vos documents.
Pour moi, j'utilise le chargeur Webpack css-loader pour implémenter des modules CSS dans une application isomorphe.
Côté serveur, la configuration du webpack sera comme ceci:
module: {
rules: [
{
test: /\.(css)$/,
include: [
path.resolve(__dirname, '../src'),
],
use: [
{
// Interprets `@import` and `url()` like `import/require()` and will resolve them
loader: 'css-loader/locals',
options: {
modules: true,
localIdentName: '[name]__[local]--[hash:base64:5]'
}
},
],
},
]
}
Côté client, la configuration du webpack ressemble à ceci
{
// Interprets `@import` and `url()` like `import/require()` and will resolve them
loader: 'css-loader',
options: {
modules: true,
localIdentName: '[name]__[local]--[hash:base64:5]'
}
},
Bien sûr, si vous utilisez SASS, vous devez utiliser sass-loader
pour compiler scss en css, et postcss-loader
peut aider à ajouter le autoprefixer
.