我正在构建一个时间轴组件,该组件当前用于测量一天(24小时)。 我打算将其用作“全局”时间轴,用于测量24小时,7周或12个月。
这就是我所拥有的
bullets(number) {
const points = [...Array(number)].map((_, i) => {
return (
<li key={i} data-pop={i < 13 ? i + ' AM' : i-12 + " PM"}></li>
)
})
return points;
}
render() {
return (
<Time>
<ul>
{this.bullets(24)}
</ul>
</Time>
)
}
我在函数中传递24或7时得到以下结果
我的疑问是如何根据我传递给函数的值(7、12或24)更改“数据弹出”(悬停时每个子弹的图例)。 我该怎么办?
答案 0 :(得分:1)
我不会根据值更改图例,因为它没有语义。有几个选项可能对您有用。一种是为子弹的数量提供道具,另一种为如何从这些数字生成文本的道具。例如:
const TimeLine = ({ totalBullets, legendFunc }) => (
<Time>
<ul>
{[...Array(number)].map((_, i) => (
<li key={i} data-pop={legendFunc(i)}></li>
))}
</ul>
</Time>
)
// use like this
<TimeLine
totalBullets={24}
legendFunc={i => (i < 13)
? i + ' AM'
: i-12 + ' PM'
}
/>
不过,更好的方法是使组件完全由数据驱动。在您的情况下,这可能只是一个文本表示形式的数组,但是将其作为对象数组可能很有意义,以便在需要时可以为事物使用不同的键。例如,首先定义要显示的数据:
// generate your bullet data somewhere
const data = [...Array(number)].map((_, i) => ({
legend: i < 13 ? i + ' AM' : i-12 + ' PM'
}))
const TimeLine = ({ bulletData }) => (
<Time>
<ul>
{bulletData.map((bullet, i) => (
<li key={i} data-pop={bullet.legend}></li>
))}
</ul>
</Time>
)
// use like
<TimeLine bulletData={data}/>