React 中样式化组件的可重用性

Posted

技术标签:

【中文标题】React 中样式化组件的可重用性【英文标题】:Reusability with Styled-Components in React 【发布时间】:2021-10-02 06:45:31 【问题描述】:

我需要在其他组件中使用我的自定义微调器。所以我做了一个可重复使用的微调器? 如何复制其样式并自定义其他样式?我只想更改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;
  
`

【问题讨论】:

【参考方案1】:

您可以在 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;

NewComponent.js

import Spinner from '../Spinner';

const CustomSpiners = () => (
  <Spinner colorValue="white" />
  <Spinner colorValue="red" />
);

export default CustomSpiner

【讨论】:

我不想导入&lt;circle ..。再次。那将是多余的 我确实更新了代码,认为这种方法是你想要的。我确实在 styled-component 中使用了道具来将可变颜色放入笔画中。 reference

以上是关于React 中样式化组件的可重用性的主要内容,如果未能解决你的问题,请参考以下文章

react-flux 应用程序的可重用性/可扩展性问题

React 中的可重用组件

在组件外部使用 redux 钩子来实现代码的可重用性

如何停止 UIPickerView 的可重用性

组件的重用性

无法在反应引导模式中使用我的可重用反应组件