【发布时间】:2021-02-19 05:58:24
【问题描述】:
我遇到的问题似乎违背了 CSS 在 JS 中的目的。我正在使用样式组件。当我尝试使用在样式组件内的反应树中某处使用的类名时。上面的组件类名样式不知何故被应用到我在树下(非常)使用的类名。
重现步骤
在 React 项目中的任何位置渲染 UpperComponent。
const StyledContainer = styled.div`
.title {
color: red;
margin-bottom: 32px;
}
`;
const UpperComponent = () => {
return (
<StyledContainer>
<FirstComponent />
<h4 className="title"> text inside upper component </h4>
</StyledContainer>
);
};
const FirstStyledContainer = styled.div``;
const FirstComponent = () => {
return (
<FirstStyledContainer>
<h4 className="title">text inside first component</h4>
<SecondComponent />
</FirstStyledContainer>
);
};
const SecondComponent = () => {
return (
<div>
<h4 className="title">text inside second component</h4>
<ThirdComponent />
</div>
);
};
const ThirdComponent = () => {
return (
<div>
<h4 className="title">text inside second component </h4>
</div>
);
};
预期行为
UpperComponent 中的title 类名不应影响其具有相同类名的后代元素。它的范围应该仅限于 <h4 className="title"> text inside upper component </h4>
实际行为
.title { color: red; margin-bottom: 32px; } 类样式应用于 UpperComponent 中的所有组件。 title 不知何故归结为 ThirdCompoent,它嵌套在两个组件中。
这是预期的行为还是我错过了一些基本的东西(最佳实践)?
【问题讨论】:
-
这是预期的行为...与样式化组件无关,实际上在 CSS-in-JS 中你不应该使用 classNames 而是使用库
-
但是你认为每一个元素都应该是一个样式化的组件吗?
-
尝试研究 css-in-js 来解决什么,这正是你想要做的
-
我已经拆分了 css/scss。关键的“首屏”css/scss 使用样式化的组件,任何“首屏”的东西我都会粘贴到 css/scss 文件中以便之后加载。当涉及到样式化组件时,有时我会制作一个反应组件样式化组件,有时我会制作一个特定于元素的组件(但大部分是反应组件)。我也可能只在样式组件中包含移动 scss/css,并将桌面断点内容放在 scss/css 文件中,以便稍后加载。
标签: html css reactjs styled-components css-in-js