reactjs - React 中样式化组件的可重用性
问题描述
我需要在其他组件中使用我的自定义微调器。所以我做了一个可重复使用的微调器?如何复制其样式并自定义其他样式?我只想更改stroke
加载的或颜色。请在这里检查我的代码
Spinner.js
import styled from 'styled-components'
const StyledSpinner = styled.svg`
animation: rotate 1s linear infinite;
width: 50px;
height: 30px;
& .path {
stroke: #000000;
stroke-linecap: round;
animation: dash 1.5s ease-in-out infinite;
}
@keyframes rotate {
100% {
transform: rotate(360deg);
}
}
@keyframes dash {
0% {
stroke-dasharray: 1, 150;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -35;
}
100% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -124;
}
}
`
const Spinner = () => (
<StyledSpinner viewBox="0 0 50 50">
<circle className="path" cx="25" cy="25" r="20" fill="none" strokeWidth="4" />
</StyledSpinner>
)
export default Spinner
新组件.js
import CustomSpinner from '../Spinner'
const Spinner = styled(CustomSpinner)`
& .path {
stroke: #fff;
}
`
解决方案
您可以在 Spiner.js 组件中添加自定义样式,然后将其导出。在 NewComponent.js 中,您可以导出自定义 spiner 样式并以与 Spiner.js 中相同的方式放置
Spinner.js
import styled from 'styled-components';
export const StyledSpinner = styled.svg`
animation: rotate 1s linear infinite;
width: 50px;
height: 30px;
& .path {
stroke: ${({ colorValue }) => colorValue}; // color props
stroke-linecap: round;
animation: dash 1.5s ease-in-out infinite;
}
@keyframes rotate {
100% {
transform: rotate(360deg);
}
}
@keyframes dash {
0% {
stroke-dasharray: 1, 150;
stroke-dashoffset: 0;
}
50% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -35;
}
100% {
stroke-dasharray: 90, 150;
stroke-dashoffset: -124;
}
}
`;
const Spinner = ({ colorValue }) => (
<StyledSpinner viewBox="0 0 50 50" colorValue={colorValue}>
<circle
className="path"
cx="25"
cy="25"
r="20"
fill="none"
strokeWidth="4"
/>
</StyledSpinner>
);
export default Spinner;
新组件.js
import Spinner from '../Spinner';
const CustomSpiners = () => (
<Spinner colorValue="white" />
<Spinner colorValue="red" />
);
export default CustomSpiner
推荐阅读
- c# - 使用自定义值解析器映射时的解析器生命周期
- grep - GNU Parallel——如何理解“块大小”设置,并猜测将其设置为什么?
- ms-access - 更新到 Office 365 版本 1912 会中断 ODBC 连接(32 位)?
- c - 如何使用指针初始化和打印结构并将其提供给函数?
- java - 将 nvarchar 值“....”转换为数据类型 int 时转换失败
- typescript - 为什么即使显式设置,打字稿也会扩大属性的类型?
- python - 为什么我使用 https://github.com/amosbastian/fpl 访问 FPL API 的代码会失败?
- php - Stripe - 向用户收费并通过电子邮件发送发票
- canvas - Python 3.8 / Tkinter:画布中的项目不能从循环内绑定到函数
- javascript - 如何从对象数组中获取唯一的日期值