繁体   English   中英

有没有办法将 SCSS 类注入到 React 组件中?

Is there a way to inject a SCSS class into a React component?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我使用 TypeScript 在 React 中构建了一个简单的Panel.tsx组件:

import * as React from 'react';

import { Label, LabelType } from 'components/basic';

import styles from './Panel.module.scss';

interface IPanel {
  title?: string;
  children: React.ReactNode;
}

const Panel = ({ title, children }: IPanel) => {
  return (
    <div className={styles.main}>
      {title && <Label type={LabelType.Title} bold text={title} />}
      {children}
    </div>
  );
};

export default Panel;

这是配套的Panel.module.scss文件:

.main {
  border: 2px solid $black;
  border-radius: 10px;
  padding: 10px;
}

现在,如果我想将 SCSS 类注入到Panel中,可能带有colorbackground-colorfont-size等。有没有办法做到这一点?

1 个回复

是的,以接受className属性的方式编写组件是很常见的(但必须由组件作者明确地将其应用于组件根)。 例如, material-ui的所有组件都接受一个类名(我不是 material-ui 的忠实粉丝,但至少在这方面他们做得对)。

您可以将其显式添加到您的道具类型

interface IPanel {
  title?: string;
  children: React.ReactNode;
  className?: string;
}

...并在您的组件中使用它

import classnames from 'clsx'; // this is a popular package to combine classnames

const Panel = ({ title, children, className }: IPanel) => {
  return (
    <div className={classnames(styles.main, className)}>
      {title && <Label type={LabelType.Title} bold text={title} />}
      {children}
    </div>
  );
};

...或者您可以使用 React 中的一种实用程序类型。 例如,我经常只允许将所有常见的 HTML 属性和子属性添加为道具(是的,我知道,我的类型并不太精确)

import type { FunctionComponent, HTMLAttributes } from 'react';
export type CommonPropsFunctionComponent<TProps = {}> = FunctionComponent<
  TProps & HTMLAttributes<Element>
>;
import { CommonPropsFunctionComponent } from './types';

interface IPanel {
  title?: string;
}

const Panel: CommonPropsFunctionComponent<IPanel>  = ({ title, children, className }) => {
  return (
    <div className={classnames(styles.main, className)}>
      {title && <Label type={LabelType.Title} bold text={title} />}
      {children}
    </div>
  );
};

使用扩展运算符

您可能很想在这里使用它; 但请注意:您必须小心不要意外覆盖您自己的本地类名。 为了说明这一点,在这个例子中:

  • 本地tabIndex可以被覆盖
  • 本地类className列表不能被覆盖,只能扩展
const SomeComponent= ({ children, className, ...rest }) => {
  return (
    <div tabIndex={0} {...rest} className={classnames(styles.root, className)}>
      {children}
    </div>
  );
};
1 React class 组件未在网站上呈现 scss

我正在将功能组件更改为 class 组件,但遇到了问题。 更新代码后,我的 scss 不见了。 在将我的功能组件重构为 class 组件之前,一切都在 scss 中正常工作,但就像我什至没有在我的 index.js 中导入 styles.scss 文件一样。 但正如您所见,它是进口的。 ...

3 在React组件中导入Scss

我有这个webpack.config文件: 当我要导入样式时,出现此错误: 未捕获的错误: 找不到位于webpackMissingModule(bundle.js:77680)位于Object.defineProperty.value(bundle.js:77680)处于 ...

4 在组件中扩展SCSS类

好的,我已经在一些不同的指南和博客中阅读了有关此内容的信息,但我一直在努力寻找合适的解决方案。 假设我的主要styles.scss文件中包含以下类: 现在说我有btn--with-image的特定实现btn--with-image是特定角度组件所特有的。 对我来说,将css类嵌入 ...

8 注入自定义 React 组件

在 React 应用程序中,客户端需要针对某些特定需求定制一些页面。 是否可以注入一些自定义 JS / React 组件并“覆盖”其他组件的行为? 我不想一直将自定义组件保留在捆绑包中并进行一些控制,因为其他客户端也可能自定义其他功能...... 基本上,我试图在内部注入一个带有自定义组件的自定 ...

2020-04-09 19:48:34 1 41   reactjs
9 在 Chrome 扩展中将 React 组件注入页面的正确方法?

我正在制作一个 Chrome 扩展程序,我想使用内容脚本将 HTML 注入到页面 DOM 中。 这很简单,但我也希望内容脚本是一个 React 组件,并且 JS 本身不需要与页面 JavaScript 上下文进行交互,这样就更简单了。 我有一种简单的方法可以将容器元素注入到我的 React 代码可以 ...

10 将React组件注入HTML

我试图从外部来源接收一段HTML标记,并将React组件注入到它的特定部分中,然后再进行渲染。 为此,我一直在使用react-html-parser ( https://github.com/wrakky/react-html-parser ) 我有这个示例在工作……尽管如此,但它感 ...

2019-05-09 06:35:37 2 404   reactjs
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM