css - 如何用emotionJS正确覆盖现有的className
问题描述
我正在尝试使用情感来覆盖来自 3rd 方库的现有 React 组件的样式。
我尽力简化此代码框中的问题
模拟ExternalLib
我正在使用的第 3 方组件,我不应该更改代码。
如您所见,它接受 css 命名空间的“前缀”道具,并在静态字符串中使用 className。(原来的也将它作为 sass 变量)
我首先尝试使用函数获取基类名称哈希css
,然后尝试以情感的方式组合它们,并得到预期的视觉结果。
const baseStyle = css`
background-color: blue;
width: 200px;
height: 200px;
`;
const getItemStyle = ({ disabled }) => {
return `
height: 50px;
margin: 4px;
background-color: ${disabled ? "gray" : "yellow"};
`;
};
const getTextStyle = ({ color }) => {
return `
color: ${color}
`;
};
const StyledExternalLib = styled(ExternalLib)`
.${baseStyle}-track {
${getItemStyle};
}
.${baseStyle}-text {
${getTextStyle};
}
`;
但是检查样式标签,我有很多重复的样式,我做错了什么?
你可以看到有两倍的黄色背景
解决方案
在这里我发现,使用 css prop 到父标签
css={{
"& .class__youwant--overwrite": {
margin: 80
}
}}
在我的情况下工作
推荐阅读
- ios - 在一个客观的 c ios 项目中,在哪里可以找到数据库模式?
- javascript - 使用 Node.js 将 SQL 对象保存到文件
- r - 如何在列名中间按字符折叠数据框列?
- python - 如何仅根据在单独数据框中找到的列值将行保留在数据框中
- string - 具有自定义连接表名称的 EFCore 多对多配置
- r - 在 R 中,如何在使用 spacy_parse 进行 NLP 后加入我的原始数据集
- java - 在 TextClock Android 中根据时间更改 TextView
- java - 将 Outlook 消息发送到 poc 电子邮件帐户,然后使用 java 代码在 Outlook 中阅读确认邮件
- mysql - 为什么我在 MySQL 中的准备语句功能不起作用?
- php - ffmpeg - 来自 rtsp 的实时视频,带有 mp4 碎片