reactjs - 如何在`react-select`中禁用`deselect-option`?
问题描述
我想使用 react-select multi Select 组件并能够多次选择相同的选项。但是,react-select 不允许这样做。您可以使用 更改下拉菜单以显示已选择的选项hideSelectOptions={false}
,但如果您再次选择其中一个,它将被取消选择。
这个问题#3234描述了同样的问题,并建议解决这个问题的一种方法是以某种方式处理action
参数onChange
。
这是我根据建议的解决方案尝试的解决方案:
import React, { Component } from "react";
import Select from "react-select";
export default class MultiSelect extends Component<*, State> {
handleChange(option, action) {
console.log(option, action);
// return;
if (action === "deselect-option") {
action = "select-option";
// now how do I do the component's state?
}
}
render() {
return (
<Select
isMulti
className="basic-single"
classNamePrefix="select"
name="color"
options={[{"label": "hello", "value": "hello"}, {"label": "world", "value": "world"}]}
hideSelectedOptions={false}
onChange={this.handleChange}
/>
);
}
}
我希望能够多次输入“hello”,但是当我再次尝试输入“hello”时,它被删除了。
解决方案
在选项中,数据字段使用任何键使值动态,在这种情况下,使用 Date.now() 使动态。然后使用操作'select-option'附加到选项,使用操作'remove-value''过滤选项数据字段中的所有字段,其标签与所选选项标签匹配并附加到数据并将一个对象附加到选项数据字段
options = [
{ value: Date.now(), label: "SUBJECT" ,val:"SUBJ" },
{ value: Date.now, label: "VERB", val:"VERB" }
]
<Select options={options} isMulti onChange={(e, option) => {
if (option.action === "select-option") {
Options=[
...Options,
{
value: option.option.value + "_" + Date.now(),
label: option.option.label
}
];
} else if (option.action === "remove-value" ||option.action === "pop-value") {
tempData = data.filter(opt => opt.label !== option.removedValue.label)
Options=[
...tempData,
{
value: option.removedValue.value + "_" + Date.now(),
label: option.removedValue.label
}
]
}
}
} />
推荐阅读
- c# - UWP 自定义 Sqlite 查询到 JSON
- javascript - GitHub工作流程陆续启动
- ios - 如果用户不授予在 iOS14 上跟踪的权限,我是否需要禁用社交媒体登录?
- github - GitHub CICD 的大文件
- c# - Xamarin Android ForceDarkHelper 是什么?
- lua - Lua ffi.load 找不到没有绝对路径的库
- temporary-objects - 临时物化转换 - 术语和概念的混淆
- python - 如何使用 scala 进程实用程序发送 EOF
- javascript - 如何在单击特定选项卡后立即为折线图制作动画?
- sql - 如何处理`|| chr(38) ||` 在 SQL 服务器中