ReactJS:使用自己的 css 创建隔离组件

ReactJS: Create isolated component with own css

我正在尝试开发一个 reactjs 组件库,以便可以被不同的项目重用。

此组件除了功能本身外,还必须有一个具有不同 css 风格的主题。

我可以写一个 css 文件,但是我必须在每个项目中导入 css 我将使用任何这些组件。我需要在内部设置这个组件的样式,所以当我在其他项目中导入它时,我会完全符合我的预期。

是否有任何 ReactJS 库(或插件?)可以在组件内编译此样式或在 componentDidMount 上应用样式?

编辑

我忘了补充说我正在使用 MaterialUI。这是一个实现 Material Design for React 的框架。

它提供了自己的样式的不同组件,我可以修改其中的一些,但不是全部。

由于Material UI 创建一个大 HTML 我无法添加内联样式,这就是为什么我需要添加一个选择器以直接从 React 应用样式的原因

Meterial UI 提供了类似的东西,所以我想是可能的。这就是我在 Material UI

中的配置方式
const muiTheme = getMuiTheme({
  palette: {
    textColor: cyan500,
  },
  appBar: {
    height: 50,
  },
});

遗憾的是,它只支持部分样式,并不是我需要的全部

如果您使用 webpack 进行转译,您可以为组件创建一个单独的样式表,然后导入它。

示例:

import './componentStyle.css';

然后在 CSS 中设置您的组件样式。每次在不同的项目中使用时,该组件都需要 jsx 和 css 文件,但如果需要,您可以轻松地为每个项目自定义 css,并且可以使用 css 类 而不是内联样式。

您的 webpack.config.js 需要这样:

module: {
  loaders: [
    {test: /\.css$/, loader: 'style-loader!css-loader'}
  ]
}

MaterialUI 现在包含 CSS-in-JS docs 功能,可让您按要求进行操作。

您可能想做一些像他们 suggest 那样的事情,并利用他们的 HOC API:

import React from 'react';
import PropTypes from 'prop-types';
import { withStyles } from '@material-ui/styles';
import Button from '@material-ui/core/Button';

const styles = {
  root: {
    background: 'linear-gradient(45deg, #FE6B8B 30%, #FF8E53 90%)',
    border: 0,
    borderRadius: 3,
    boxShadow: '0 3px 5px 2px rgba(255, 105, 135, .3)',
    color: 'white',
    height: 48,
    padding: '0 30px',
  },
};

function HigherOrderComponent(props) {
  const { classes } = props;
  return <Button className={classes.root}>Higher-order component</Button>;
}

HigherOrderComponent.propTypes = {
  classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(HigherOrderComponent);

如果您使用 npx create-react-app 创建了应用程序,那么

  1. *.module.css 文件导入您的样式。示例:import styles from './component.module.css' 内容为 .ssss { color: red }
  2. 使用 {styles.ssss} 应用您的风格。示例:<div className={styles.ssss}>