如何使选项中的 react-select 不允许 space?

How to make react-select disallow space in options?

我们正在研究用 react-select 3.1 替换旧的标记系统。由于历史原因,我们不允许在我们的标签中使用 space(更改它很复杂)。

但是! react-select 似乎认为 spaces 在标签中完全没问题。我 认为 我想做的是让 space 成为一个本质上说“嘿,我用完了这个标签”的东西,就像 enter 和 tab 目前所做的一样——这符合我们的现有行为,如果可能的话,我想保留它。

有没有办法配置 react-select 以使用此行为?

谢谢!

您将需要管理 react-select 的状态,使其成为受控组件,但您可以通过以下方式实现:

import Select from "react-select/creatable";
import { useState } from "react";

export default function App() {
  const [value, setValue] = useState(null);
  const [inputValue, setInputValue] = useState("");

  return (
    <div className="App">
      <Select
        inputValue={inputValue}
        onInputChange={(v) => setInputValue(v)}
        onChange={(v) => setValue(v)}
        onKeyDown={(e) => {
          if (e.key === " ") {
            e.preventDefault();
            const newValue = {
              label: inputValue,
              value: inputValue
            };
            setValue((v) => {
              return [...(v ?? []), newValue];
            });
            setInputValue("");
          }
        }}
        value={value}
        isMulti
        options={[
          {
            label: "aaa",
            value: "aaa"
          },
          {
            label: "bbb",
            value: "bbb"
          }
        ]}
      />
    </div>
  );
}