gpt4 book ai didi

javascript - React - 每个样式元素的组件?

转载 作者:搜寻专家 更新时间:2023-10-31 23:18:42 25 4
gpt4 key购买 nike

我正在学习 React。

React 似乎高度促进了组合。 Create React App 甚至建议不要重用 css 类。

假设我有一个容器,它是一个白色的盒子,带有漂亮的圆 Angular 和阴影等。它可以包含任何东西。就是这样。没有逻辑。除了 <div> 之外没有多少 html

传统上,我只会创建一个名为 .white-box 的全局 css 类然后将其应用于任何 <div>我希望它是这个白框。

我知道在 React 中你也可以做到这一点。你想做什么,就可以做什么。但一般做法是什么?根据我在网上找到的内容,似乎我应该为它创建一个组件并将所有子项放入其中:

<WhiteBox>
<div>anything</div>
</WhiteBox>

是不是太过分了?这样做有什么好处?我是否应该为所有可以重复使用的东西创建一个组件,即使它是如此之小?

最佳答案

老实说,这是个人喜好和经验的问题。

例如,看似实用的方法是在 div 上使用 .white-box 类; super 简单,无需导入!

稍后,您决定其他控件中的每个白框都需要多一点阴影,因此您为 .some-component 添加了 CSS 规则。 white-box,然后 bam,现在你得到了一个更暗的白框,而没有弄乱原来的 CSS 类。 简单又好用!

问题 这样做一次或两次就没问题了。但是您很快就会养成为特定目的“修补”类名规则的习惯,并且在您知道之前您正在混合规则而不自知,这正是它在 jar 头上所说的:Cascading 样式表。

我自己去过,维护起来没什么意思。现在我为所有东西创建组件,甚至是像白盒子这样简单的东西。诀窍是正确命名它们;您不会将其称为 WhiteBox,因为如果您更改了行中框的颜色,则其余代码都是谎言。 ;) 相反,将其命名为 ContentBox;描述它的目的的东西,而不是它看起来像什么。然后使用 Prop 来确定盒子应该具有什么特征:

<ContentBox shadow padded rounded>Awesome</ContentBox>

我个人是 CSS Modules 的 super 粉丝因为他们确保类(class)规则永远不会发生冲突,从而完全避免了上述问题。相反,如果您希望一个类从另一个类继承某些样式,CSS 模块可让您将它们组合在一起。

示例 CSS 模块文件:

.root {
background-color: #fff;
}

还有一个 React 组件:

import React from 'react'
import styles from './ContentBox.css'

export default function ContentBox({ children }) {
return (
<div className={styles.root}>{children}</div>
)
}

实际使用的类名实际上类似于 ContentBox__root_abcd123random 所以即使您有另一个具有相同 .root 类的 CSS 文件,规则也不会冲突。


这样做的一个额外好处是您的组件现在可以移植到其他元素,因为它只依赖于组件附带的 CSS 文件中的样式。在我们公司的许多内部 Web 应用程序中,我很享受使用这种策略的大量重用。

关于javascript - React - 每个样式元素的组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48327798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com