javascript - react 选择分组的多个选项以对象作为值

标签 javascript reactjs react-select

所以,我正在尝试添加 react-select我的项目的组件。我正在使用分组选项并尝试能够选择多个选项

这是我的组件代码

class QueueFilter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      options: [
        {
          label: 'Partner',
          options: [
            {
              value: {
                id: 'ABCDSC',
                value: 'Partner1'
              },
              label: 'Partner1'
            },
            {
              value: {
                id: 'ABCDSC',
                value: 'Partner2'
              },
              label: 'Partner2'
            }
          ]
        },
        {
          label: 'Study',
          options: [
            {
              value: {
                id: 'ABCDSC123',
                value: 'Study1'
              },
              label: 'Study1'
            }
          ]
        }
      ],
      selectedFilters: []
    };
    this.fecthQueueFilters = this.fecthQueueFilters.bind(this);
    this.onFilterChange = this.onFilterChange.bind(this);
    this.applyFilter = this.applyFilter.bind(this);
  }

  componentDidMount(prevState, prevProps) {
    if (prevProps.queueId !== this.props.queueId) {
      this.fetchQueueFilters(this.props.queueId);
    }
  }


  onFilterChange(selectedFilters) {
    this.setState({ selectedFilters });
  }

  fecthQueueFilters(queueId) {

  }

  applyFilter() {

  }

  render() {

    const groupStyles = {
      display: 'flex',
      alignItems: 'center',
      justifyContent: 'space-between',
    };

    const groupBadgeStyles = {
      backgroundColor: '#EBECF0',
      borderRadius: '2em',
      color: '#172B4D',
      display: 'inline-block',
      fontSize: 12,
      fontWeight: 'normal',
      lineHeight: '1',
      minWidth: 1,
      padding: '0.16666666666667em 0.5em',
      textAlign: 'center',
    };

    const formatGroupLabel = data => (
      <div style={groupStyles}>
        <span>{data.label}</span>
        <span style={groupBadgeStyles}>{data.options.length}</span>
      </div>
    );

    const Input = (props) => {
      if (props.isHidden) {
        return <components.Input {...props} />;
      }
      return (
        <div style={{ border: '1px dotted black' }}>
          <components.Input {...props} />
        </div>
      );
    };

    return (
      <Container fluid className="main-header">
        <Row>
          <Col xs="1">Queue Filters:</Col>
          <Col auto>
            <Select
              options={this.state.options}
              isMulti
              isClearable
              formatGroupLabel={formatGroupLabel}
              components={{Input}}
              closeMenuOnSelect={false}
              value={this.state.selectedFilters}
              onChange={this.onFilterChange}
            />
          </Col>
          <Col xs="1">
            <Button type="button" onClick={this.applyFilter} color="success">
              <Filter />
            </Button>
          </Col>
        </Row>
      </Container>
    );
  }
}

QueueFilter.propTypes = {
  queueId: PropTypes.string
};

export default QueueFilter;

但是当我选择多个选项时,选择字段中只显示 1

enter image description here

控制台显示已选择 2 个选项

enter image description here

而且,控制台中有这个警告

enter image description here

如果我将选项值更改为简单字符串而不是对象

this.state = {
  options: [
    {
      label: 'Partner',
      options: [
        {
          value: 'ABCDSC:Partner1',
          label: 'Partner1'
        },
        {
          value: 'ABCDSC:Partner2',
          label: 'Partner2'
        }
      ]
    },
    {
      label: 'Study',
      options: [
        {
          value: 'ABCDSC123:Study1',
          label: 'Study1'
        }
      ]
    }
  ],
  selectedFilters: []
};

嗯,它按预期工作,但我宁愿拥有对象值。

知道如何实现这一目标吗?

最佳答案

您可以使用 Prop getOptionValue

<Select
  getOptionValue={option => option.value.value}

关于javascript - react 选择分组的多个选项以对象作为值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58102724/

相关文章:

javascript - React-select 在切换时显示键盘

javascript - 使用 menuPortalTarget 时如何修复 react 选择下拉菜单的样式

javascript - 尝试使用 $.ajax 发送 JSON,改为发送查询字符串

reactjs - 重嵌套对象的 TypeScript 类型

javascript - 将 ref 传递给 HTML 元素到自定义钩子(Hook)

javascript - react-fullpage - 避免渲染中的 setState 无限循环

javascript - 几次击键后打开 react-select 自动完成

javascript - 如何重用 kendo-ui 窗口 jquery

javascript - 使用 JavaScript 更改网站背景不起作用

javascript - 如何在javascript中查找x是否等于数组中的任何值