创建新组件并从 styled-component 继承样式

Lam*_*005 16 javascript emotion styled-components

const Button = styled.button`
  display: inline-block;
  width: 300px;
  background-color: black;
`    

const ButtonHref = styled.a`
  ${Button}
`   
Run Code Online (Sandbox Code Playgroud)

所以我有两个样式组件。我想继承“按钮”样式但创建另一个标签。我使用反应情绪。我怎样才能做到这一点?

Bre*_*ody 24

这里有几个选项,使用组合、样式化组件或使用道具。第二个选项可能是您想要的,但我也提供了其他两个选项。

1. 使用组合

const baseButton = css`
  color: white;
  background-color: black;
`

const fancyButton = css`
  background-color: red;
`

render() {

  return (
    <div>
      <button css={baseButton}></button>
     <button css={[baseButton, fancyButton]}></button>
    </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

第二个按钮将具有baseButtonspecialButton样式。

或者...

const baseButton = css`
 color: white;
 background-color: black;
`

const fancyButton = css`
 ${baseButton};
 background-color: red;
`

render() {
 return (
   <div>
     <button css={baseButton}></button>
     <button css={fancyButton}></button>
   </div>
 )
}
Run Code Online (Sandbox Code Playgroud)

2. 使用样式化组件

const Button = styled.button`
  color: white;
  background-color: black;
`
const Fancy = styled(Button)`
  background-color: red;
`

render() {
  return (
    <div>
      <Button>Button</Button>
      <Fancy>Fancy</Fancy>
    </div>
  )
}
Run Code Online (Sandbox Code Playgroud)

这适用于任何接受className道具的组件,它button确实如此。

3. 使用 props

  const Button = styled.button`
    color: white;
    background-color: ${props => props.fancy ? 'red' : 'black'};
  `

  render() {
    return (
      <div>
        <Button>Button</Button>
        <Button fancy>Fancy</Button>
      </div>
    )
  )
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了同样的问题,OP想要继承`button`的样式并将它们应用到`a`,你的解决方案仅适用于相同的标签。我想知道您是否可以编写 **不同** 标签的样式 (2认同)

Jam*_*mes 6

如果您只想拥有a与您完全相同的款式,Button那么您可以这样做<Button as=\xe2\x80\x9ca\xe2\x80\x9d />

\n