Babel および ES6 構文を使用して React でインジケーター コンポーネントをプログラミングしており、CSS モジュールを使用しているコンポーネントのスタイルを設定しています。コンポーネントは正常に動作していますが、コードの品質を改善したいと考えています。
インジケーターの各状態で、ドットの色が変わります。
import React from 'react'
import ClassNames from 'classnames'
import styles from './Indicator.css'
const Indicator = (props) => {
const { current, number, enabled } = props
if (enabled) {
const dots = []
for (var i = 0; i < number; i++) {
// FIXME: It must be a better way to implement this
let dotStyles = ClassNames(styles.dot, {
[styles.red]: current === i && i === 0,
[styles.orange]: current === i && i === 1,
[styles.yellow]: current === i && i === 2,
[styles.green]: current === i && i === 3,
[styles.gray]: current !== i
})
dots.push(<div className={dotStyles} key={i} />)
}
return <div className={styles.indicator}>{dots}</div>
} else {
return <div />
}
}
const { number, bool } = React.PropTypes
Indicator.propTypes = {
number: number,
current: number,
enabled: bool
}
export default Indicator
スタイルを定義する CSS は、CSS モジュールと compose キーワードを使用します
.indicator {
display: flex;
flex-direction: row;
align-items: center;
height: 12px;
margin-bottom: 40px;
}
.dot {
width: 12px;
height: 12px;
margin-left: 10px;
border-radius: 6px;
}
.gray { composes: gray from '../../colors.css'; }
.red { composes: red from '../../colors.css'; }
.orange { composes: orange from '../../colors.css'; }
.yellow { composes: yellow from '../../colors.css'; }
.green { composes: green from '../../colors.css'; }
このアプローチについて 2 つの質問があります。
- 使用されているすべての色をクラスに再割り当てしてから、条件に応じて割り当てるのは少し面倒です。何か足りないものはありますか?
- React で状態と classNames の割り当てを処理するより良い方法はありますか? これは単純な例ですが、他のコードに非常に厄介な条件がいくつかあり、それらを避けたいと考えています。
私はreact-css-modulesを調べてきましたが、これまでのところ、コード全体に styles.class があってもかまわないと思います。