问题描述
这是我在 FormField 中使用服务器端搜索的 Select 组件的基本实现:
export default function AddProduct() {
const [form,setForm] = useState({ category_id: '' })
const [categories,setCategories] = useState([])
const onSearch = string => {
const makeRequest = async () => {
const term = string && string.length ? string.trim() : ''
const options = { q: term,'per-page': 1 }
// Requesting categories based on user's search.
const res = await API().categories.fetchMany(options)
try {
const json = await res.json()
// Updating the categories list on-the-fly from server-side response.
setCategories(json.data)
} catch (e) {
// ...
}
}
makeRequest()
}
return (
<Box>
<Form
value={form}
onChange={nextForm => setForm(nextForm)}
>
<FormField
name='category_id'
htmlFor='input-categories'
label='Categories'
>
<Select
name='category_id'
// dispatches the first request (usability only) in order to prevent
// user from viewing an empty list.
onopen={onSearch}
onSearch={onSearch}
// Options are always the filtered list from server-side.
options={categories}
labelKey="name"
valueKey={{ key: 'id',reduce: true }}
/>
</FormField>
</Form>
</Box>
)
}
预期行为
我希望用户可以无限期地搜索和选择选项,而不会在选项数组中不存在所选选项时变为空白。
实际行为
如果用户搜索一个类别并选择,那么它会正确显示为选定的选项,但是当用户再次搜索并且选定的选项没有出现在服务器端结果中时(换句话说,不在选项列表中) ) 则所选选项变为空白。
2.首先,我选择“Tijolo”类别。
3.然后我改为“Ferro”。
4.最后一步我再次打开了选择下拉菜单,它发送了一个请求“onopen”事件,结果页面中没有“Ferro”,然后它的选项变为空白。
正如我现在所看到的,“onSearch”事件似乎并没有让它成为空白,但“onopen”却是。我想知道为什么(?)。
有没有人知道如何处理在 grommet Select 组件中呈现动态选项的“onopen”和“onSearch”事件?
索环版本:2.17.2
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)