问题
I'm using react-select to present the user with a dropdown list of options. I would like it if a specific option is chosen, all other options will disappear.
For example, if the "ALL" option is selected, I would like all other options to disappear:
As far as I saw, react-select maintains the state of the non-selected options. Can this be controlled via some prop passed to the react-select component?
回答1:
You can write related processes in handler, if all is selected, change the option data to the item all only. If selection cleared, restore the original option data.
import React from "react";
import "./styles.css";
import Select from "react-select";
const data = [
{ value: "1", label: "1" },
{ value: "2", label: "2" },
{ value: "3", label: "3" },
{ value: "4", label: "all" }
];
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedLabel: "",
selectedLabelList: []
};
}
singleHandler = e => {
this.setState({ selectedLabel: e ? e.label : "" });
};
multiHandler = e => {
this.setState({
selectedLabelList: e && e.length > 0 ? e.map(x => x.label) : []
});
};
render() {
const { selectedLabel, selectedLabelList } = this.state;
const subListWithAll = data.filter(x => x.label === "all");
const singleOptions = selectedLabel === "all" ? subListWithAll : data;
const multiOptions = selectedLabelList.includes("all")
? subListWithAll
: data;
return (
<>
<div>
<Select
id="single"
isClearable={true}
value={singleOptions.filter(x => x.label === selectedLabel)}
options={singleOptions}
onChange={this.singleHandler}
/>
</div>
<div>
<Select
id="multi"
isMulti
isClearable={true}
value={multiOptions.filter(x =>
selectedLabelList.includes(x.label)
)}
options={multiOptions}
onChange={this.multiHandler}
/>
</div>
</>
);
}
}
Try it online:
来源:https://stackoverflow.com/questions/60616545/react-select-how-to-clear-options-once-user-selected