React Styled-Components 3 按钮尺寸

React Styled-Components 3 Button sizes

有 3 种基于道具的样式类型的最佳方法是什么?

喜欢Bootstrap,希望有一个默认的,小的,中等的大小。

这里我有默认的和小的,但是大的怎么算呢?

 const Button = styled.button`
   background: teal;
   border-radius: 8px;
   color: white;
   height: ${props => props.small ? 40 : 60}px;
   width: ${props => props.small ? 60 : 120}px;
`;

class Application extends React.Component {
  render() {
    return (
      <div>
        <Button small>Click Me</Button>
        <Button>Click Me</Button>
        <Button large>Click Me</Button>
      </div>
    )
  }
}

Codepen

这是我使用的一个选项的缩写示例。

/* import separate css file from styles.js */
import * as Styles from './styles';

/* concat styles based on props */
const ButtonBase = styled.button`
  ${Styles.buttonbase};
  ${props => Styles[props.size]};
  ${props => Styles[props.variant]};
`;

const Button = ({ size, variant, ...rest }) => (
  <ButtonBase
    size={size}
    variant={variant}
    {...rest}
    ...

并在样式文件中(为简洁起见删除了 css)

import { css } from 'styled-components';

/* styles common to all buttons */
export const buttonbase = css`...`;

/* theme variants */
export const primary = css`...`;
export const secondary = css`...`;
export const tertiary = css`...`;

/* size variants */
export const small = css`...`;
export const medium = css`...`;
export const large = css`...`;

我认为这是解决以下问题的方法:

const ButtonBase = styled.button`
    padding: ${props => {
        if (props.xl) return props.theme.buttonSize.xl;
        if (props.lg) return props.theme.buttonSize.lg;
        if (props.md) return props.theme.buttonSize.md;
        if (props.sm) return props.theme.buttonSize.sm;
        return props.theme.buttonSize.nm;
    }};
`

https://codesandbox.io/s/735ppo790x