在添加选项时停止 react-select 扩展
Stop react-select from expanding as options are added
因此,我正在研究是否有可能将 react-select 用于需要 multi-select 的项目。但是,随着 selected 的项目越来越多,multi-select example 不断向下扩展。如果下拉菜单有一堆选项可供选择(比如说 100),这将不起作用。在 react-select 库中有没有办法让值成为 "Xyz & 5 more" 或类似的东西?
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"
/>
)
您可以使用 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。
因此,我正在研究是否有可能将 react-select 用于需要 multi-select 的项目。但是,随着 selected 的项目越来越多,multi-select example 不断向下扩展。如果下拉菜单有一堆选项可供选择(比如说 100),这将不起作用。在 react-select 库中有没有办法让值成为 "Xyz & 5 more" 或类似的东西?
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"
/>
)
您可以使用 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。