由create-react-app的react项目使用局部css

为什么webpack项目中使用局部css

在项目中,尤其是大项目中,很可能因为使用相同的css,在vue中可以直接在style中加入scope属性,而在create-react-app的react项目怎么实现这种局部的style呢

通过style-loader实现局部css

第一种方式通过style-loader的modules属性

暴露出webpack配置 如果暴露过了 省略此步骤

npm run eject

修改配置

// config > webpack.config.dev.js

// style files regexes
const cssRegex = /\.css$/;
const useable = /\.use(able)?\.css$/;  // 添加 匹配css
const cssModuleRegex = /\.module\.css$|\.use(able)?\.css$/;

 {
    test: cssRegex,
    exclude: cssModuleRegex,
    use: getStyleLoaders({
      importLoaders: 1,
      modules: true  // 添加到这里
    }),
  },

css 注意在配置中配置了正则,值匹配名带use.css或者useable.css为结尾的文件

//  style.use.css
.box {
    background: red;
}

组件中使用

import React, {Component} from ‘react‘;
import style from ‘./style.use.css‘

export default class Test extends Component {
    render() {
        return(
            <div className = {style.box}>
                <div>
                    {‘测试‘}
                </div>
            </div>
        )
    }
}

最终class被修改只在此组件中使用,在组件中就可以用这种方式来设置局部的css了

第二种方式

通过这种方式,不是真正的设置了局部变量,而是让style只在这个组件渲染的时候,将style添加到页面中,组件销毁之后卸载组件用的style

首先也是暴露出webpack配置 如果暴露过了 省略此步骤

npm run eject
// config > webpack.config.dev.js

修改配置
// style files regexes
const cssRegex = /\.css$/;
const useable = /\.use(able)?\.css$/;  // 添加 匹配css
const cssModuleRegex = /\.module\.css$|\.use(able)?\.css$/;

// 添加一个getUseableLoaders
const getUseableLoaders = (cssOptions, preProcessor) => {
  const loaders = [
    require.resolve(‘style-loader/useable‘),
    {
      loader: require.resolve(‘css-loader‘),
      options: cssOptions,
    },
    {
      // Options for PostCSS as we reference these options twice
      // Adds vendor prefixing based on your specified browser support in
      // package.json
      loader: require.resolve(‘postcss-loader‘),
      options: {
        // Necessary for external CSS imports to work
        // https://github.com/facebook/create-react-app/issues/2677
        ident: ‘postcss‘,
        plugins: () => [
          require(‘postcss-flexbugs-fixes‘),
          require(‘postcss-preset-env‘)({
            autoprefixer: {
              flexbox: ‘no-2009‘,
            },
            stage: 3,
          }),
        ],
      },
    },
  ];
  if (preProcessor) {
    loaders.push(require.resolve(preProcessor));
  }
  return loaders;
};
   ...
   ...
   {
    test: cssRegex,
    exclude: cssModuleRegex,
    use: getStyleLoaders({
      importLoaders: 1,
    }),
  },
  { // 添加loader
    test: useable,
    exclude: cssModuleRegex,
    use: getUseableLoaders({
      importLoaders: 1,
    }),
  },
  ...
  ...

css 注意在配置中配置了正则,值匹配名带use.css或者useable.css为结尾的文件

//  style.use.css
.box {
    background: red;
}

组件中使用

import React, {Component} from ‘react‘;
import style from ‘./style.use.css‘

export default class Test extends Component {
    render() {
        return(
            <div className = ‘box‘>
                <div>
                    {‘测试‘}
                </div>
            </div>
        )
    }
}

这样就之后再加载此组件中 style.use.css 才会被引用

原文地址:https://www.cnblogs.com/slongs/p/10147020.html

时间: 2024-09-29 02:09:59

由create-react-app的react项目使用局部css的相关文章

React漫漫学习路之 利用Create React App命令创建一个React应用

所谓万事开头难,本文旨在为初探React的同学,建立第一个最基本的react应用. Create React App是Facebook官方的一个快速构建新的 React 单页面应用的脚手架工具,它可以帮你配置开发环境,以便你可以使用最新的 JavaScript 特性,还能提供很棒的开发体验,并为生产环境优化你的应用.(如果你使用过vue-cli构建vue应用,那么此处可类比) 话不多说,直接开始. 安装 全局安装create-react-app npm install -g create-rea

React Native电商项目实战混合APP开发 React Native实战 混合APP实战开发

React Native  和 angular+ionic 是目前网络上最火的混合APP开发语言,其功能强大能够开发出安卓和IOS程序! ------------------课程目录------------------ <React Native电商项目实战>├<01React Native初体验>│  ├01-React Native简介.mp4│  ├02-React Native环境搭建.mp4│  ├03-React Native初体验及其它环境搭建.mp4│  └04-R

[React] {svg, css module, sass} support in Create React App 2.0

create-react-app version 2.0 added a lot of new features. One of the new features is added the svgr webpack loader to wrap SVGs in React components as a named export. This let’s you either grab the filename from the default export or grab a wrapped S

React项目 - 几种CSS实践

前言团队在使用react时,不断探索,使用了很多不同的css实现方式,此篇blog总结了,react项目中常见的几种css解决方案:inline-style/radium/style-component,只列举了团队项目中用过的一下实现方式,还有其他的不过多展开 css的不足样式与状态相关的情况越来越多,需要动态.能直接访问组件state的css.一切样式都是全局,产生的各种命名的痛苦,BEM等命名规则能解决一部分问题,但当你使用三方插件时却无法避免命名冲突. Vue怎么解决 scoped 属性

React -- 脚手架书写react

一.脚手架工具 react也有很多脚手架工具,通过脚手架工具可以快速搭建一个项目应用. 官方推荐脚手架 如果你是在学习 React 或创建一个新的单页应用 Create React App 如果你是在用 Node.js 构建服务端渲染的网站 Next.js 如果你是在构建面向内容的静态网站 Gatsby 二.create-react-app 安装 npx create-react-app react-project 注意是npx,不是npm 安装创建好项目之后,切换到项目就可以运行项目了 运行

[React] Recompose: Theme React Components Live with Context

SASS Bootstrap allows us to configure theme or branding variables that affect all components (e.g. Primary Color or Link Color). When we isolate our styles inside React components we lose the ability to theme them. To get round this we can put our th

[React] Set up React apps with zero configuration

The React team has an official Command Line Interface (CLI) for building React projects called "Create React App"; in this lesson, we show how to use this tool to quickly set up new projects using the create-react-app {project-name}command. We t

[React] Style a React component with styled-components

In this lesson, we remove the mapping between a React component and the styles applied to it via classnames. We write our styles directly within the component, in a real CSS syntax, with the full power of JavaScript. Old: import React, { Component }

React Native之React速学教程(下)

概述 本篇为<React Native之React速学教程>的最后一篇.本篇将带着大家一起认识ES6,学习在开发中常用的一些ES6的新特性,以及ES6与ES5的区别,解决大家在学习React /React Native过程中对于ES6与ES5的一些困惑. ES6的特性 何为ES6? ES6全称ECMAScript 6.0,ES6于2015年6月17日发布,ECMAScript是ECMA制定的标准化脚本语言.目前JavaScript使用的ECMAScript版本为ECMAScript-262.