【发布时间】:2021-08-28 05:02:57
【问题描述】:
使用 react-select 在我的 Mongo 中实现了一个基于数组字段的动态下拉菜单,就像这样。
import React, { useState } from 'react'
import Select from 'react-select'
const NonFormikSelect = (props) => {
const [selectedOptions, setSelectedOptions] = useState([])
let options1 = props.member.members.map(member => ({
label: member.MemberName,
value: member.MemberName
}))
console.log(options1)
const selectChangeHandler = (event, numberofgroups) => {
}
const newValues = props.nogot.tournament.TournamentGroups.map((numberofgroups) => {
return (
<Select
key={numberofgroups}
name={numberofgroups}
isMulti
options={options1}
value={numberofgroups in selectedOptions ? selectedOptions[numberofgroups]: ""}
onChange={(event) => selectChangeHandler(event, numberofgroups)}
/>
)
})
return (
newValues
)
}
export default NonFormikSelect
我的难题在于更改处理函数。我尝试了多个组合并浏览了多个文档,但无法破解我想要的设计。这是我在这个组件中的状态声明
const [selectedOptions, setSelectedOptions] = useState([])
这是我想要的 onChange 功能。
假设 - 我的 map 函数的输入数组有 2 个元素,因此这意味着 2 个选择下拉列表将被推送到前端,下拉列表中的值将来自另一个 options1 对象。正如 react-select 所期望的那样,这有一个标签和值键对。假设对象内部有 10 个键值对。
当用户打开表单时,他会看到 2 个下拉菜单。如果他在第一个下拉列表中选择 3 个名称,那么我希望这些名称从第二个下拉列表中删除。在第二个下拉列表中,假设他选择了。然后需要将所有 8 个值提升到父组件,在那里我正在获取 API 并更新我的集合。
这可行吗?我已经没有想法了。我的更改处理函数现在是空的,因此这里没有发布任何内容
【问题讨论】:
-
所以你想有条件地从第二个数组的值中过滤掉一个选择数组的先前值?
-
是的,先生,如果可能的话。我的第一个选择是“John”、“Joe”和“Joel”。我选择约翰。所以下一个选择应该只有 Joe 和 Joel。当我点击提交时。两个选择项的用户选择的所有值都应推送到父项
-
所以第一个选择是整个数组,然后第二个选择只是第一个未使用的值?
-
是的,先生,这就是愿望
-
您是在 React 中还是在 HTML 中生成选择字段?
标签: reactjs react-select