我有一个关于作文的问题,希望有人能帮助我。我正在使用react-css-modules
Sass,我想知道为我们的基本底层组件之一组合事物的最佳方式。
这是我们的组件:
import React, {PropTypes} from 'react'
import cssModules from 'react-css-modules'
import styles from './style.sass'
const Button = ({children = 'Submit', ...props}) => {
const align = props.align ? `-${props.align}` : ''
const type = props.type ? `-${props.type}` : ''
const styleName = `button${type}${align}`
return (
<button onClick={props.onClick} {...props} styleName={styleName}>
{children}
</button>
)
}
Button.propTypes = {
align: PropTypes.string,
onClick: PropTypes.func.isRequired,
type: PropTypes.string,
}
export default cssModules(Button, styles)
这是到目前为止的样式表:
@import "~components/styles/variables"
.button
color: $button-default
background-color: transparent
font-family: $font-family
font-size: $default-font-size
font-weight: $font-regular
line-height: $default-button-height
margin: 0 $pad 0 0
outline: none
padding: 0 $pad*2
.left
float: left
.right
float: right
.primary
color: $background-interaction
background-color: $button-default
.button-left
composes: button, left
.button-right
composes: button, right
.button-primary
composes: button, primary
.button-primary-left
composes: button, primary, left
.button-primary-right
composes: button, primary, right
目前来看,还挺痛苦的。我们添加的每个可配置道具都会以指数方式增加我们必须提供的组合类的数量。我们目前可以配置align
and type
,并且由于两者都可以为 null 我们有 6 种可能的组合,因此除了 base 之外还要创建 5 个组合类.button
。如果我们只添加一个道具,比如一个 boolean bold
,我们现在必须添加一大堆新的组合类名:.button-bold, .button-left-bold, .button-right-bold, .button-primary-bold, .button-primary-left-bold, .button-primary-right-bold
.
我知道react-css-modules
我们可以启用该allowMultiple
设置以允许我们指定多个模块以应用于一个元素,但我的理解是这违反了最佳实践。我觉得我们必须在这里遗漏一些东西。我们做错了什么?