javascript - 在反应语义-ui中为每个选定的下拉项着色
问题描述
我在方法中有以下jsx
代码(react-semantic-ui
)render
:
{!this.props.loading &&
<ControlRow>
<Grid.Column width={5}>
<Dropdown
multiple
fluid
selection
options={myOptions}
onChange={this.navigateToMyFunc}
/>
...
...
我正在使用styled-components
我的元素来设置样式:
https://github.com/styled-components/styled-components
Dropdown
不幸的是,由于环境的一些奇怪细节,唯一有效的样式是间接来自ControlRow
:
const ControlsRow = styled(Grid.Row)`
.ui.multiple.dropdown > .label {
color: white !important;
background-color: #2185d0;
}
`
另请参阅以下线程:使用 styled-components 包装时,语义 ui 中的下拉菜单不能由多选类型组成
现在Dropdown
你可以看到是 type multiple
。每个选定的项目应根据myOptions
选项中指定的颜色进行着色。我可以传递myOptions
给ControlRow
which 将使数组可以在其中访问,但我不确定如何编写styled-components
它的一部分:
.ui.multiple.dropdown > .label {
color: white !important;
background-color: ${props => props.myOptions..??};
}
我还需要知道选择正确myOptions
颜色的项目。这是它的外观:
现在它只是 always blue
,但我需要根据每个选项对其进行着色。
更新
似乎这是一个不存在的功能semantic-ui-react
- 按代码着色hex
(只允许使用一些常规颜色名称) - 所以我将此功能发布到他们的github
:
https://github.com/Semantic-Org/Semantic-UI-React/issues/3889
解决方案
默认情况下,语义 UI 支持选定的颜色列表。如果您需要自定义标签颜色,您可以添加自定义 css 类并将类名称应用于标签。
const getOptions = (myOptions : string[]) => {
return myOptions.map((myValue : string) =>({
key: myValue,
text: myValue,
value: myValue,
label: { className: setColorClass(myValue), empty: true, circular: true }
}))
}
function setColorClass(optValue) {
if (optValue === '1') return 'light-green';
else if (optValue === '2') return 'sandy-brown';
else return 'light-coral';
}
在您的 CSS 课程中,您可以拥有以下课程
.ui.label.light-green {
background-color: lightgreen !important;
}
.ui.label.sandy-brown {
background-color: lightgreen !important;
}
.ui.label.light-coral {
background-color: lightgreen !important;
}
此外,如果您想在选择值时应用标签圆形颜色,您可以执行以下操作,在您的反应类中编写一个 renderLabel 函数并将其应用到组件中
function renderLabel(label:any){
return {
content: `${label.text}`,
className: setColorClass(label.text)
}
}
示例组件
<Dropdown
search
selection
closeOnChange
value={myValue}
options={getOptions(myOptions)}
placeholder='Choose from here'
onChange={handleDropdownChange}
renderLabel={renderLabel}
/>
推荐阅读
- android - android studio,kotlin中未解决的参考android
- runtime-error - 我收到运行时错误,因为注释了 if 语句如何解决?
- reactjs - NextJs/Material-ui 不尊重 makeStyles CSS
- java - 使用 SHARED PREFERENCES android studio 更改按钮的文本
- azure - 通过 azure app 服务的私有链接连接到 cosmos db
- html - 如何使用部分将背景图片放在另一张图片下方?
- terraform - 寻找一种更简洁的嵌套循环方式
- mongodb - 使用填充时按猫鼬中的嵌套对象属性排序
- node.js - 如何将凭证 json 文件与 GCP bigquery 与 nodejs 集成?
- webrtc - 是否可以作为机器人加入 Microsoft Teams、zoom 或 Google Meet 通话并进行记录