如何使用 React JS 在 select 框中进行搜索?

How to make search in select box using React JS?

我正在 Antd design 的帮助下制作一个 select 盒子。

当前场景:

-> 我在这里做了两个 select 框,其中一个 select 有静态数据,另一个来自 api.

问题:

-> 当我为 select 选项键入关键字时,静态选项有效,但动态选项(来自 api 的数据) 无效 和显示无数据文本。

预期:

静态和动态select框都需要根据select框中的搜索关键字显示选项。

代码:(静态选项)

  <Select mode="multiple" style={{ width: 120 }}>
    <Select.Option value="jack">Jack</Select.Option>
    <Select.Option value="lucy">Lucy</Select.Option>
    <Select.Option value="disabled" disabled>
      Disabled
    </Select.Option>
    <Select.Option value="Yiminghe">yiminghe</Select.Option>
  </Select>

代码:(来自 api 的选项)

  <Select mode="multiple" style={{ width: 120 }}>
    {data.map(({ label, value, text }) =>
      label ? (
        <Select.Option value={value || ""} key={label}>
          {text}
        </Select.Option>
      ) : null
    )}
  </Select>

工作示例:

值与选项文本相同时有效。大概是antd的特点

  <Select mode="multiple" style={{ width: 120 }}>
    {data.map(({ label, value, text }) =>
      label ? (
        <Select.Option value={label} key={label}>
          {text}
        </Select.Option>
      ) : null
    )}
  </Select>

您混淆了 label 和 value 值。 label 是您输入并尝试匹配的名称值。

useEffect(() => {
  fetch("https://api.github.com/users")
    .then((res) => res.json())
    .then((data) => {
      const userData = data.map((item) => ({
        label: item.login, // <-- input values you are matching
        value: item.id
      }));
      setData(userData);
    });
}, []);

...

<Select mode="multiple" style={{ width: 120 }}>
  {data.map(({ label, value, text }) => (
    <Select.Option value={label} key={value}> // <-- label is option value
      {label}
    </Select.Option>
  ))}
</Select>