向样式化组件添加类

Mos*_*she 9 javascript reactjs styled-components

我正在尝试将类名添加到 React 组件,以便我可以更轻松地使用样式化组件自定义该组件。以下是该组件的简化轮廓:

const SignupForm = props => (
    <form>
      <Input className="input" />
      <Button className="button" />
    </form>
  )
Run Code Online (Sandbox Code Playgroud)

这是我想如何使用它:

import { SignupForm } from '../path/to/signup-form'

  <Form />
...

const Form = styled(SignupForm)`
  .input {
     /* Custom Styles */
  }

  .button {
     /* Custom Styles */
  }
`
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。只有当我创建一个包装组件时它才会工作 - 像这样:

import { SignupForm } from '../path/to/signup-form'

  <FormWrapper>
    <SignupForm/>
  <FormWrapper>
...

const FormWrapper = styled.div`
  .input {
     /* Custom Styles */
  }

  .button {
     /* Custom Styles */
  }
`
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一种方法可以访问.input.button无需创建包装类,即通过实际导入的类本身?如果是这样,如何?

Ash*_*war 24

className只需使用attrs现有样式组件添加额外的属性即可。

const FormWrapper = styled.div.attrs({
  className: 'SignupForm',
  })`
    .input {
    /* Custom Styles */
    }

   .button {
   /* Custom Styles */
   }
   `
Run Code Online (Sandbox Code Playgroud)


Den*_*ash 10

您需要提供className包装器/容器作为styled-component通过它注入样式:

const SignupForm = ({ className }) => (
  <form className={className}>
    <input className="input" />
    <button className="button">Button</button>
  </form>
);

const Form = styled(SignupForm)`
  .input {
    background-color: palegreen;
  }

  .button {
    background-color: palevioletred;
  }
`;
Run Code Online (Sandbox Code Playgroud)

编辑 Hungry-moser-3lu0p