如何使用 CSS 模块在 React 中设置子组件的样式

Posted

技术标签:

【中文标题】如何使用 CSS 模块在 React 中设置子组件的样式【英文标题】:How to style child components in React with CSS Modules 【发布时间】:2018-11-17 16:54:19 【问题描述】:

我将 React 与 SASS 和 CSS 模块一起使用。如何在不传递新的 ClassName 或类似的东西的情况下设置子组件的样式。例如。

我想在子组件上定位或做一些样式,而不必给出特定的类,就像当你做 p span 时那样,所有的跨度都是子组件,我只想做一些引用父级中所有子级组件的样式。但是随着类的编译,我不知道如何引用那些孩子。

//ParentComponent.js
Import Styles from 'ParentComponent.scss';
Import Child from 'ChildComponent';
Import ChildB from 'ChildComponentB';
...
return(
    <div>
        <ChildB />
        <Child />
        <Child />
    </div>
);


//ParentComponent.scss (?)(?)
.child ...

这里我如何仅引用 Child 组件而不传递 ClassName,例如,或者不导入 ChildComponent 的 SASS 文件以获取对组件类的引用。

//ChildComponent.js
Import Styles from 'ChildComponent.scss';
...
return(
    <div classNames=Styles.child></div>
);

//ChildComponent.scss
.child ...

【问题讨论】:

【参考方案1】:

对此有多种方法,有缺点也有缺点。

将每个孩子包装在一个 div 中

第一个是将您的每个子组件包装在 div 中,然后在其上添加一个类,然后您可以在样式表中引用它:

return(
    <div>
        <div className=style.child><ChildB /></div>
        <div className=style.child><Child /></div>
        <div className=style.child><Child /></div>
    </div>
);

将 className 作为 props 传递

您可以将类名作为道具传递,然后将此道具添加到您想要在子组件中的任何标记中。另一方面,您必须为每个想要拥有类的组件执行此操作。

return(
    <div>
        <ChildB className=style.child/>
        <Child className=style.child/>
        <Child className=style.child/>
    </div>
);
//ChildComponent.js
Import Styles from 'ChildComponent.scss';
...
export default ( className ) => 
    <div className=`$Styles.child $className`></div>

使用 CSS 子组合符

在您的父样式表中,您可以使用 the direct children selector &gt; 选择任何直接子代。您也可以将此运算符与星号运算符结合使用,但请小心使用此运算符,因为如果经常在页面上使用它可能会降低浏览器速度

如果我们假设您的所有子组件都是div

/* ParentComponent.scss */
.parent > div 
  

或者如果你不知道孩子是由什么制成的

/* ParentComponent.scss */
.parent > *
  

【讨论】:

当子类名称被破坏并且您想在父类上选择特定类来覆盖其样式时,上述方法不起作用,是吗?

以上是关于如何使用 CSS 模块在 React 中设置子组件的样式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 css 模块文件中设置非散列类的样式?

我们如何在道场 TreeGrid 中设置子级?

vue中设置子组件的点击事件不影响父组件的点击事件

在 Reactjs 中使用样式化组件而不是 CSS 模块有啥好处 [关闭]

如何在 nginx 中设置子文件夹

Objective C:如何在当前可见帧中设置子视图显示? (UITableView)