首页 > 解决方案 > 如何仅使用 react-select onChange 事件和 value 道具中的值?

问题描述

我尝试在我的 reactjs 应用程序中使用 react-select,但是 onChange 事件有问题。onChange 应该发送两个参数。第一个应该是选定值,但不是选定值,而是整个选项项作为选定值传递。

例如

这种行为与大多数输入组件不一致。我希望onChange传递项目的值,而对于项目本身,我希望有另一个类似onItemSelected或类似的事件。

另外,当我设置value={'2'}(受控组件)时,该组件不显示所选项目。

我必须说我将 AsyncSelect 与 loadOptions 一起使用。

我怎样才能让它只使用简单的值,而不是选项对象?

如果这不能发生,我必须放弃 react-select 以获得另一个类似的组件。

标签: react-select

解决方案


AFAIK 目前没有办法让 React-Select 在内部只使用值。我在我的应用程序中所做的是实现一个层来检索下降的对象,并提取上升的值。像这样的东西(这是简化的,您可能需要更多的验证或处理,具体取决于您的应用程序):

const Select extends Component {
  handleChange(newSelected) {
    // this.props.handleChange is your own function that handle changes
    // in the upper scope and receives only the value prop of the object
    // (to store in state, call a service, etc)
    this.props.handleChange(newSelected.value);
  }

  render() {
    // Assuming you get the simple value as a prop from your store/upper 
    // scope, so we need to retrieve the option object. You can do this in 
    // getDerivedStateFromProps or wherever it suits you best
    const { options, value } = this.props;
    const selectedOption = options.find(option => option.value === value)

    <ReactSelect
      options={options}
      value={selectedOption}
      onChange={this.handleChange}
      {...props}
    />
}

推荐阅读