繁体   English   中英

提取的 styles 的循环依赖与样式组件

[英]Circular dependency for extracted styles with styled-components

我对样式组件相当陌生,并试图提取/重构 styles 以分离文件。 我有循环依赖的问题 - 可能是因为缺乏样式组件良好实践的经验。 这是这种情况:

// A.js
import { StyledA } from './styles';

export default () => (
  <StyledA>
    <SomeOtherComponent />
  </StyledA>
);

// B.js
import { StyledA1 } from './styles';

export default () => (
   <SomeWrapperComponent>
     <StyledA1 />
   </SomeWrapperComponent>
);

// styles.js
import styled from 'styled-components';
import A from './A.js';

export const StyledA = styled.div`...`;
export const StyledA1 = styled(A)`...`; // causes dependency circle error

我想要实现的是扩展A组件 styles 并保留它的子组件(对于文件B.js )。

  • export const StyledA1 = styled(StyledA)不起作用,因为我丢失了组件A结构。
  • ...并在 styles.js 中导入A由于导入A.js → styles.js → A.js styles.js eslint“依赖周期”错误。

我应该怎么做才能保持扩展组件的 HTML 结构并解决依赖周期问题?

使用 CSS-in-JS(如styled-components )时,您通常将style生成的组件保存在同一个文件中。

那么如何导出使用 CSS-in-JS 构造函数生成的className呢? 通过使用复合组件

export const StyledA = styled.div`
  background: red;
  font-size: 20px;
`;

const A = ({ className }) => (
  <StyledA className={className}>
    <div>Display me always!</div>
  </StyledA>
);

// Can use any naming here
A.className = StyledA;

export default A;

此外,当您想重用 styles时,您可以创建styles.js类的文件并声明可重用css块:

import { css } from 'styled-components';

const border = css`
  border: 2px black solid;
`;

export { border };

完整用法:

import A from './components/A';
import styled from 'styled-components';
import { border } from './components/styles';

const StyledA = styled(A)`
  background-color: palevioletred;
`;

const StyledASelector = styled.div`
  ${A.className} {
    background-color: paleturquoise;
    margin: 5px;
    ${border}
  }
`;

const App = () => {
  return (
    <>
      <A />
      <StyledA />
      <StyledASelector>
        <A />
      </StyledASelector>
    </>
  );
};

编辑有趣的-heyrovsky-sgujh

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM