javascript - 样式组件 - 具有相同样式的两个不同元素
问题描述
我有一个Button
组件(在 React 中),它可以是一个button
或一个a
元素,这取决于是否将href
prop 传递给组件。类似于以下内容:
const Button = ({ children, href, onClick }) => {
if(href) {
return <a href={href} onClick={onClick}>{children}</a>;
}
return <button type="button" onClick={onClick}>{children}</button>;
};
我以前使用 Sass 来设置这些组件的样式,但现在正试图转移到styled-components
. 但是,我遇到了一个问题,这两个元素需要相同的样式,但是 的语法styled-components
需要我创建以分隔变量 -styled.button
和styled.a
,每个元素都有重复的样式。
我想知道是否有一种方法可以动态更改 中使用的元素styled-components
,也许基于道具,就像可以更改单个 CSS 属性一样?我尝试了一些类似的东西:
const StyledButton = styled((props) => props.href ? 'a' : 'button')`
...
`;
但到目前为止还没有运气。任何建议将不胜感激。
解决方案
创建可以重复使用的通用样式
您可以提取样式并将其作为字符串参数传递给样式化组件。
const buttonStyles = `
color: red;
...
`
const StyledA = styled.a(buttonStyles);
const StyledButton = styled.button(buttonStyles);
如果你需要一些例外
import styled, { css } from ‘styled-components’;
const baseInputStyles = css`
padding: 0.5em;
`;
const StyledA = styled.a`
${baseInputStyles}
`;
const StyledButton = styled.button`
${baseInputStyles}
/* make changes as needed*/
`;
推荐阅读
- ios - Core Data 获取请求与 NSFetchedResultsController 的一对多关系
- python - XPath 总是返回空列表
- scala - IntelliJ 错误地突出显示“提取器的参数数量错误”
- javascript - Mozilla 扩展在短时间内意外注销用户
- amazon-web-services - 无法在 AWS 控制台中访问我的 VPC 以创建我的 redshift 集群
- reactjs - 使用没有状态的输入标签反应展示(无状态)组件?
- c# - 无法在 .net 核心项目中访问 JsonDicomConverter
- google-cloud-platform - 如何在 Stackdriver 警报文档中获取 Bigquery 表的名称
- c++ - 如何使用 CMake 简单地将 opencv 包含在我的项目中
- python - 带有 Python 3.4 的 Cherrypy