添加选项时停止扩展反应选择

时间:2019-03-19 01:13:35

标签: reactjs drop-down-menu dropdown multi-select react-select

因此,我正在研究对需要多选的项目潜在地使用react-select。但是,随着选择了更多项目,多选example会继续向下扩展。如果下拉菜单中有很多可供选择的选项(例如100),则此方法将无效。 react-select库中是否有一种方法可以使值成为“ Xyz&more 5”或类似的东西?

import React, { Component } from 'react'
import Select from 'react-select'

const options = [
  { value: 'chocolate', label: 'Chocolate' },
  { value: 'strawberry', label: 'Strawberry' },
  { value: 'vanilla', label: 'Vanilla' },
  { value: 'cherry', label: 'Cherry' },
  { value: 'foo', label: 'Foo' },
  { value: 'bar', label: 'Bar' }
]

const MyComponent = () => (
  <Select
    options={options}
    isMulti
    className="basic-multi-select"
    classNamePrefix="select"
  />
)

1 个答案:

答案 0 :(得分:2)

您可以使用components framework覆盖ValueContainer组件,该组件以其徽章形式保存选定的值。

const ValueContainer = ({ children, getValue, ...props }) => {
  var values = getValue();
  var valueLabel = "";

  if (values.length > 0) valueLabel += props.selectProps.getOptionLabel(values[0]);
  if (values.length > 1) valueLabel += ` & ${values.length - 1} more`;

  // Keep standard placeholder and input from react-select
  var childsToRender = React.Children.toArray(children).filter((child) => ['Input', 'DummyInput', 'Placeholder'].indexOf(child.type.name) >= 0);

  return (
    <components.ValueContainer {...props}>
      {!props.selectProps.inputValue && valueLabel }
      { childsToRender }
    </components.ValueContainer>
  );
};

<Select
  { ... }
  isMulti
  components={{
    ValueContainer
  }}
  hideSelectedOptions={false}
/>

请注意Input(或DummyInput)组件的过滤和包含:如果没有它,Select组件的基本功能(如焦点等)将丢失。 还将hideSelectedOptions属性设置为false,以便您取消选择选定的选项。

可以查看有效的示例here