React 中样式化组件的可重用性
Reusability with Styled-Components in 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
NewComponent.js
import CustomSpinner from '../Spinner'
const Spinner = styled(CustomSpinner)`
& .path {
stroke: #fff;
}
`
您可以在 Spiner.js 组件中添加自定义样式,然后将其导出。在 NewComponent.js 中,您导出自定义旋转器样式并像在 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;
NewComponent.js
import Spinner from '../Spinner';
const CustomSpiners = () => (
<Spinner colorValue="white" />
<Spinner colorValue="red" />
);
export default CustomSpiner
我需要在其他组件中使用我的自定义微调器。所以我做了一个可重复使用的微调器?
如何复制其样式并自定义其他样式?我只想更改 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
NewComponent.js
import CustomSpinner from '../Spinner'
const Spinner = styled(CustomSpinner)`
& .path {
stroke: #fff;
}
`
您可以在 Spiner.js 组件中添加自定义样式,然后将其导出。在 NewComponent.js 中,您导出自定义旋转器样式并像在 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;
NewComponent.js
import Spinner from '../Spinner';
const CustomSpiners = () => (
<Spinner colorValue="white" />
<Spinner colorValue="red" />
);
export default CustomSpiner