样式化的组件不会覆盖其他组件的样式

Spa*_*000 0 javascript reactjs styled-components

我有一个已经像这样构建的组件:

const Banner = ({ image, heading, text }) => (
  <Container>
    <Background src={image}>
      <BannerContent>
        <h1>{heading}</h1>
        <h2>{text}</h2>
      </BannerContent>
    </Background>
  </Container>
);

const BannerContent = styled.div`
  h1 {
    font-size: 24px;
  }

  h2 {
    font-size: 16px;
  }
`;
Run Code Online (Sandbox Code Playgroud)

并且我试图覆盖和的样式,h1h2在另一个组件中添加新样式,如下所示:

const PageBanner = styled(Banner)`
  h1 {
    font-size: 20px;
    width: ...
  }

  h2 {
    font-size: 13px;
    width: ...
  }
`;
Run Code Online (Sandbox Code Playgroud)

但是,这些都没有发生。我以为是因为它嵌套在里面?我可以覆盖样式吗?还是我应该建立一个类似的组件?

Tho*_*lle 7

如果要对自己的自定义组件之一进行样式设置,则必须确保使用className样式化组件提供给组件的属性

const Banner = ({ image, heading, text, className }) => (
  <Container className={className}>
    <Background src={image}>
      <BannerContent>
        <h1>{heading}</h1>
        <h2>{text}</h2>
      </BannerContent>
    </Background>
  </Container>
);

const PageBanner = styled(Banner)`
  h1 {
    font-size: 20px;
    width: ...
  }

  h2 {
    font-size: 13px;
    width: ...
  }
`;
Run Code Online (Sandbox Code Playgroud)

  • @Spacebear5000 不,这只是意味着样式化组件将在幕后创建一个新的类名,并将其发送到包装的 `Banner` 组件。你只需要确保你使用的是给 `Banner` 组件的 `className` prop。 (2认同)
  • 我在这方面浪费了太多时间,我什至阅读了文档的这一部分,但并没有真正理解。尽管如此,我才刚刚开始学习 React,所以_谢谢你_,@Tholle! (2认同)