【问题标题】:Styled component not wrapping another styled component样式化组件不包装另一个样式化组件
【发布时间】:2020-10-19 12:13:39
【问题描述】:

我有一个像这样的Popup 组件:

import React, { useEffect } from 'react';
import styled from 'styled-components';

const Div = styled.div`
  position: absolute;
`;

const Popup = ({ isOpen, onClose, children }) => {

  useEffect(() => {
    const onClick = e => {
      if (isOpen && onClose) {
        onClose();
      }
    };

    document.addEventListener('click', onClick);
    return () => document.removeEventListener('click', onClick);
  }, [isOpen, onClose]);

  return <Div>
    {isOpen && children}
  </Div>;
};

export default Popup;

现在我正在尝试将其包装到另一个样式组件中:

const Menu = styled(Popup)`
  background-color: red;
`;

但是使用这个Menu 只会应用来自Popup 的样式,即背景颜色保持白色。为什么不变成红色?

【问题讨论】:

标签: javascript css reactjs styled-components


【解决方案1】:

您需要将 className 属性添加到 Popup 组件以允许 css-in-js 库 (styled-component) 注入其样式:

const Popup = ({ isOpen, onClose, children, className }) => {
  //...
  return <Div className={className}>{isOpen && children}</Div>;
};

请参阅Docs 中的样式化普通 React 组件

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 2021-04-13
    • 2020-09-26
    • 2020-10-27
    • 2020-09-22
    • 2021-01-12
    • 2021-07-02
    • 2019-10-27
    相关资源
    最近更新 更多