Ale*_*lex 4 reactjs react-select
let options = [
{
"label": "Group 1",
"options": [
{
"label": "Item1", "value": "1|1"
},
{
"label": "Item2", "value": "1|2"
},
{
"label": "Item3", "value": "1|3"
}
]
},
{
"label": "Group n",
"options": [
{
"label": "Item1", "value": "2|1"
},
{
"label": "Item2", "value": "2|2"
}
]
}
];
<Select
onChange={this.onChange}
closeMenuOnSelect={false}
isMulti
menuIsOpen={true}
options={options}
/>
Run Code Online (Sandbox Code Playgroud)
onChange仅针对组的子项触发,在文档中我找不到用于设置组标题可点击的属性或可以实现此目的的其他选项,有什么想法吗?
我也尝试为这样的团体增加价值
[
{
"label": "Group 1",
"value": [
"1|1",
"1|2",
"1|3"
],
"options": [
{
"label": "item1",
"value": "1|1"
},
{
"label": "item2",
"value": "1|2"
},
{
"label": "item3",
"value": "1|3"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
但组不可点击
gdh*_*gdh 10
是的,这就是react-select工作原理,您无法直接单击/选择该组。
但是,为了使该组可单击,请在数组内的对象中提供一个labeland 。valueoptions
像这样
let options = [
{
label: "---GROUP 1---",
value: "1"
},
{
options: [
{
label: "Item1",
value: "1|1"
...
Run Code Online (Sandbox Code Playgroud)
这将使该组可单击和可选择。
代码的工作副本位于codesandbox中
另一个可能有用的信息是:
您可以为该组编写自定义组件。这样你就可以附加onClick或做其他类型的事情。
<Select
components={{GroupHeading: () => <div onClick={() => console.log('i am a group and i am clickable .. yay!')}>My Group Heading</div>}}
onChange={onChange}
Run Code Online (Sandbox Code Playgroud)
====编辑:根据评论中的请求:====
要在单击组标签时选择所有组项目,请执行以下操作:
value例如维持一个状态onClick将连接值(状态)的组件valueprop ofreact-select并提供valuefrom 状态onChange并更新状态,value即在项目选择时我已经更新了代码的codesandbox工作副本(与上面的链接相同)
代码片段:
const group1Options = [
{
label: "Item1",
value: "1|1"
},
{
label: "Item2",
value: "1|2"
},
{
label: "Item3",
value: "1|3"
}
];
const group2Options = [
{
label: "Item1",
value: "2|1"
},
{
label: "Item2",
value: "2|2"
}
];
const createGroup = (groupName, options, setValue) => {
return {
label: (() => {
return (
<div
onClick={() =>
setValue(value =>
value.concat(options.filter(grpOpt => !value.includes(grpOpt)))
)
}
>
{groupName}
</div>
);
})(),
options: options
};
};
export default function App() {
const [value, setValue] = useState([]);
let options = [
createGroup("---GROUP 1---", group1Options, setValue),
createGroup("---GROUP 2---", group2Options, setValue)
];
return (
<div className="App">
<h1>Hello CodeSandbox</h1>
<Select
// components={{GroupHeading: () => <div onClick={() => console.log('i am a group and i am clickable .. yay!')}>My Group Heading</div>}}
onChange={option => {
console.log(option);
return setValue(option);
}}
closeMenuOnSelect={false}
isMulti
menuIsOpen={true}
options={options}
value={value}
/>
</div>
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6473 次 |
| 最近记录: |