我如何为 react-select v1 定义默认值

How can i define a default value for react-select v1

我有一个 react-select 呈现电子邮件列表,我需要在 selected 和保存电子邮件时将 selected 电子邮件保留为默认选项,但默认值不起作用。我该怎么做?

这是我的 select 组件:

  const [selectedOption, setSelectedOption] = useState("")

  const makeEmailOption = item => ({
    value: item.id,
    label: item.ccEmail,
    id: item.id,
    chipLabel: item.ccEmail,
    rest: item,
    selected: item.selected
  })
  const makeEmailOptions = items => items.map(makeEmailOption)

  const handleChange = (value) => {
    setSelectedOption(value)
    props.emails(value)
  }

  return (
    <div>
      <Select
        multi={true}
        name={props.name}
        options={makeEmailOptions(props.ccemailfilter)} 
        onChange={handleChange}
        value={selectedOption} 
      />
    </div>
  )

我把所有的东西都当作道具来接受,然后用它来做出选择。如果字段 selected 为真,我该如何设置默认值?

您几乎已经做到了,但在这种情况下,您将 value 设置为 selectedOption,而不是设置 defaultValue。此外,每次更改时您都在更改默认值,这是不需要的。

const defaultVal = {value: selectedOption, label: selectedOption};

return (
  <div>
    <Select
      multi={true}
      name={props.name}
      options={makeEmailOptions(props.ccemailfilter)} 
      defaultValue={defaultVal} 
    />
  </div>
)

我提出了以下解决方案,因为我的组件使用函数将一些变量设置为 select,我使用 useEffect 在页面呈现后立即通过过滤器调用它。

  useEffect(()  => {
     handleChange(makeEmailOption(props.ccemailfilter.filter(x => x.selected)))
  }, [])

  const handleChange = (value) => {
    setSelectedOption(value)
    props.emails(value)
  }

因此,在 select 的 onChange 上调用 handleChange,并在页面加载后一次为 select 创建一个值以供使用。