如何在加载 select 控件时删除预先 selected 的选项?
How to remove pre-selected options when loading select control?
加载时我正在使用 react-select 和 pre-selecting 选项(来自状态)。使用多个 select 是的。
当我点击 Select 框时,它仍然显示已经出现的选项。如何从选项列表中删除那些?
这是我的代码:
const options = []
{
deviceData ? deviceData.forEach((element, key) => {
options.push({ value: element.id, label: element.area })
}) : null;
}
<Select isMulti
isSearchable
value={defaultSelected}
onChange={handleChange}
options={options}
/>
function handleChange(selectedOption) {
setDefaultSelected(selectedOption)
};
async function getRooms(deviceIds) {
... // filterring logic to select multiple options load
... filteredDevices.push({ value: index, label: devicesAll.area })
setDefaultSelected(filteredDevices) // This loads pre-selected values to multi select box.
}
更新:
我注意到 pre-selection 仅在我提供值作为索引时有效(value={defaultSelected})。
所以我在下面作为 "defaultSelected" 值传递,其中 value: number
可能是因为这个,加载的时候没有过滤掉select的值?
console.log(过滤设备)
{ id: "5d25f9d2dc4aea7838b0aa9f" label: "Meeting room 2" value: 0 }
如果您需要更多代码来理解这个问题,请告诉我。谢谢
如果我理解你的问题,你希望在第一次渲染时预先选择 "default values"(由 defaultSelected
提供),并且你希望这些可以由用户更改在随后的互动中。
一种方法是通过 defaultValue
道具,它应该做你想做的事:
<Select isMulti isSearchable
defaultValue={defaultSelected} // <-- use defaultValue instead
onChange={handleChange}
options={options} />
例如,做这样的事情:
const values = [
{ id: "5d25f9d2dc4aea7838b0aa9f", label: "Meeting room 2", value: 0 },
{ id: "5d25f9d2dc4aea7838b11111", label: "Meeting room 1", value: 1 }
];
<Select
defaultValue={[values[0]]}
isMulti
name="colors"
options={values} />
下面是a working example showing上面的操作
加载时我正在使用 react-select 和 pre-selecting 选项(来自状态)。使用多个 select 是的。 当我点击 Select 框时,它仍然显示已经出现的选项。如何从选项列表中删除那些?
这是我的代码:
const options = []
{
deviceData ? deviceData.forEach((element, key) => {
options.push({ value: element.id, label: element.area })
}) : null;
}
<Select isMulti
isSearchable
value={defaultSelected}
onChange={handleChange}
options={options}
/>
function handleChange(selectedOption) {
setDefaultSelected(selectedOption)
};
async function getRooms(deviceIds) {
... // filterring logic to select multiple options load
... filteredDevices.push({ value: index, label: devicesAll.area })
setDefaultSelected(filteredDevices) // This loads pre-selected values to multi select box.
}
更新: 我注意到 pre-selection 仅在我提供值作为索引时有效(value={defaultSelected})。 所以我在下面作为 "defaultSelected" 值传递,其中 value: number
可能是因为这个,加载的时候没有过滤掉select的值? console.log(过滤设备)
{ id: "5d25f9d2dc4aea7838b0aa9f" label: "Meeting room 2" value: 0 }
如果您需要更多代码来理解这个问题,请告诉我。谢谢
如果我理解你的问题,你希望在第一次渲染时预先选择 "default values"(由 defaultSelected
提供),并且你希望这些可以由用户更改在随后的互动中。
一种方法是通过 defaultValue
道具,它应该做你想做的事:
<Select isMulti isSearchable
defaultValue={defaultSelected} // <-- use defaultValue instead
onChange={handleChange}
options={options} />
例如,做这样的事情:
const values = [
{ id: "5d25f9d2dc4aea7838b0aa9f", label: "Meeting room 2", value: 0 },
{ id: "5d25f9d2dc4aea7838b11111", label: "Meeting room 1", value: 1 }
];
<Select
defaultValue={[values[0]]}
isMulti
name="colors"
options={values} />
下面是a working example showing上面的操作