Grommet - 如何在搜索中使用 Select 组件?

问题描述

这是我在 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>
  )
}

预期行为

我希望用户可以无限期地搜索和选择选项,而不会在选项数组中不存在所选选项时变为空白。

实际行为

如果用户搜索一个类别并选择,那么它会正确显示为选定的选项,但是当用户再次搜索并且选定的选项没有出现在服务器端结果中时(换句话说,不在选项列表中) ) 则所选选项变为空白。

1.在这里我有意只为每次搜索呈现一个结果。

enter image description here

2.首先,我选择“Tijolo”类别。

enter image description here

3.然后我改为“Ferro”。

enter image description here

enter image description here

4.最后一步我再次打开了选择下拉菜单,它发送了一个请求“onopen”事件,结果页面中没有“Ferro”,然后它的选项变为空白。

enter image description here

正如我现在所看到的,“onSearch”事件似乎并没有让它成为空白,但“onopen”却是。我想知道为什么(?)。

有没有人知道如何处理在 grommet Select 组件中呈现动态选项的“onopen”和“onSearch”事件?

索环版本:2.17.2

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...