基于道具的三种样式类型的最佳方式是什么?
就像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>
)
}
}发布于 2018-03-08 20:43:17
下面是我使用的一个选项的缩写示例。
/* 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`...`;发布于 2018-03-09 19:32:11
我也认为这是一种解决方案:
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;
}};
`发布于 2022-07-06 10:47:27
Harsha Venkatram,这是打字稿:
import * as Styles from './styles';
interface Props {
size: number; //for example, or string or whatever type is it
variant: 'primary' | 'secondary' | 'tertiary' //etc...
}
const ButtonBase = styled.button<Props>`
${Styles.buttonbase};
${props => Styles[props.size]};
${props => Styles[props.variant]};
`;https://stackoverflow.com/questions/49181959
复制相似问题