【发布时间】:2020-05-20 08:58:06
【问题描述】:
我有一个由大量按钮(超过 300 个)组成的 UI,这些按钮根据 CSS 样式表设置样式。
如何根据传递的数据突出显示其中一些按钮。
例如,这是我拥有的一些按钮。它们都有一个分配给它们的唯一值,允许用户在单击时提取更多信息(因此是 onClick)。
<div className="btn">
<button type = "button" name = "channelID" value = 'A01' onClick = {this.onClick}>A01</button>
<button type = "button" name = "channelID" value = 'A02' onClick = {this.onClick}>A02</button>
<button type = "button" name = "channelID" value = 'A03' onClick = {this.onClick}>A03</button>
<button type = "button" name = "channelID" value = 'A04' onClick = {this.onClick}>A04</button>
<button type = "button" name = "channelID" value = 'A05' onClick = {this.onClick}>A05</button>
</div>
默认情况下,假设 CSS 样式表设置按钮的样式如下:
.btn button = {
background-color: black;
color: white
}
我还有一个选择标签,它应该允许用户选择频道的特定属性:
<select name="datatype" onChange={this.handleChange}>
<option>--- Data Type ---</option>
<option value="inspected">View Inspected Channels</option>
<option value="requiresReplacement">View Channels to Replace</option>
</select>
假设有人从此下拉列表中选择了“已检查”。 它将仅从主数据中过滤并返回已检查属性设置为 true 的通道。如果只检查了通道 A02、A03 和 A05,它看起来像这样:
state = {
channelsToHighlight = [
{
channelID: "A02",
inspected: true
},
{
channelID: "A03",
inspected: true
},
{
channelID: "A05",
inspected: true
},
]
}
(如果用户选择了“查看要替换的频道”选项,它将调出不同的频道子集。)
我现在希望通道 A02、A03 和 A05 具有不同的背景颜色,以便突出显示。
我考虑过向我的组件添加一个 getStyle() 选项,该选项将有条件地呈现,但我不确定我将如何做到这一点。是否可以将 channelsToHighlight 对象中的 channelID 属性与我为每个按钮设置的值匹配?
任何帮助或建议将不胜感激!
【问题讨论】:
-
你可以有另一个 css 类,例如
.selected-btn具有您需要的 css 属性(即不同的颜色背景),您可以使用当前状态来确定是否在按钮上设置 className 以包含 selected-btn 类 -
假设状态与您的按钮在同一个组件中,这可以通过以下方式确定:
this.state.channelsToHighlight.find(c => c.channelID == "A02").inspected- for "A02" -
如何渲染按钮?是通过循环
map、forEach、filter?
标签: javascript css reactjs button