Javascript 这与搜索结果相符,但我同样因时间问题而受挫。我试图绕过这一点,但总是被角落里的案子缠住 我为“选择所有匹配项”设计的UI感觉与react Select集成得不太好。如果它是他们组件的一部分,而不是在它旁边,那就更好了 通过使用Select组件的values属性,您绕过了组件对其状态的内部管理,因此添加、删除、,如果不重新实现自定义onChange处理程序中的所有内容,则无法清除项目,该处理程序将修改状态。选中的将传递给值。自己管理这件事似乎也不太可取

Javascript 这与搜索结果相符,但我同样因时间问题而受挫。我试图绕过这一点,但总是被角落里的案子缠住 我为“选择所有匹配项”设计的UI感觉与react Select集成得不太好。如果它是他们组件的一部分,而不是在它旁边,那就更好了 通过使用Select组件的values属性,您绕过了组件对其状态的内部管理,因此添加、删除、,如果不重新实现自定义onChange处理程序中的所有内容,则无法清除项目,该处理程序将修改状态。选中的将传递给值。自己管理这件事似乎也不太可取,javascript,reactjs,react-select,Javascript,Reactjs,React Select,所以,我有一个解决方案,但如果有人有一个更干净和/或更简单的建议,我会很高兴听到它 看起来分叉控件并在组件内部进行这些更改可能是更好的方法 在我的onInputChanged中,我尝试使用一些getElementsByClassNamehackery直接从DOM获取匹配的搜索结果,尽管这种方法不起作用,因为onInputChanged 我砍掉了一些东西,这些东西能满足我的需求,但非常难看: 使用: 尝试搜索“apple”,然后按“将所有匹配项添加到选择” 方法: 正如@wdm所提到的,

所以,我有一个解决方案,但如果有人有一个更干净和/或更简单的建议,我会很高兴听到它

看起来分叉控件并在组件内部进行这些更改可能是更好的方法

  • 在我的
    onInputChanged
    中,我尝试使用一些
    getElementsByClassName
    hackery直接从DOM获取匹配的搜索结果,尽管这种方法不起作用,因为
    onInputChanged

我砍掉了一些东西,这些东西能满足我的需求,但非常难看:

使用:

  • 尝试搜索“apple”,然后按“将所有匹配项添加到选择”
方法:

  • 正如@wdm所提到的,有一个
    onInputChanged
    可以连接到
  • onInputChanged
    中,获取匹配项并将其存储在组件的状态中
  • 我在
    Select
    附近添加了一个按钮,允许用户选择将匹配的项目集复制到另一个状态变量
    chosenItems
  • react select
    select
    组件有一个
    属性,您可以提供该属性以编程方式选择项目。我将
    state.chosenItems
    传递给此
这是可行的,但有很多事情让这成为一种痛苦:

  • 在匹配筛选器的项出现之前,将调用
    onInputChanged
    处理程序。我试图通过DOM查询获取匹配项,但没有成功,因为
    onInputChanged
    太早了。因此,我不依赖于
    react select
    的过滤逻辑,而是在
    onInputChanged
    处理程序中复制过滤逻辑。这不是很好,因为我的筛选逻辑和显示的匹配项列表之间可能存在差异
  • 每当键入搜索后单击时,
    react select
    将清除搜索,这将再次调用
    onInputChanged
    事件。因此,通过单击自定义的“添加所有匹配项”按钮,它将删除过滤器,清除列表,调用
    onInputChanged
    ,并使用新的匹配项列表设置状态。为了解决这个问题,我需要有一个
    previousMatchingOptions
    状态变量,它跟踪上一次调用
    onInputChanged
    中的匹配项。这似乎是一个可怕的黑客
  • 同样,我试图根据当前是否有多个项目与搜索匹配来隐藏/显示我的“选择所有匹配的项目”按钮,但同样由于时间问题而受阻。我试图绕过这一点,但总是被角落里的案子缠住
  • 我为“选择所有匹配项”设计的UI感觉与
    react Select
    集成得不太好。如果它是他们组件的一部分,而不是在它旁边,那就更好了
  • 通过使用
    Select
    组件的
    values
    属性,您绕过了组件对其状态的内部管理,因此添加、删除、,如果不重新实现自定义
    onChange
    处理程序中的所有内容,则无法清除项目,该处理程序将修改
    状态。选中的
    将传递给
    值。自己管理这件事似乎也不太可取
所以,我有一个解决方案,但如果有人有一个更干净和/或更简单的建议,我会很高兴听到它

看起来分叉控件并在组件内部进行这些更改可能是更好的方法

  • 在我的
    onInputChanged
    中,我尝试使用一些
    getElementsByClassName
    hackery直接从DOM获取匹配的搜索结果,尽管这种方法不起作用,因为
    onInputChanged

您可以像这样使用
过滤器选项
功能:

<select
  options={[{label: 'test', value: 1, customData: 'bla blub test'}]}
  filterOption={(option, filter) => {
    const { customData } = option.customData;

    if(customData.toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
      return true;
    }
  }} />
{
const{customData}=option.customData;
if(customData.toLowerCase().indexOf(filter.toLowerCase())>=0){
返回true;
}
}} />

希望这对您有所帮助:)

您可以像这样使用
过滤器选项
功能:

<select
  options={[{label: 'test', value: 1, customData: 'bla blub test'}]}
  filterOption={(option, filter) => {
    const { customData } = option.customData;

    if(customData.toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
      return true;
    }
  }} />
{
const{customData}=option.customData;
if(customData.toLowerCase().indexOf(filter.toLowerCase())>=0){
返回true;
}
}} />

希望这对您有所帮助:)

实现“全选”选项的一种非常简单的方法是使用自定义组件覆盖React Select组件。为此,首先需要将其作为

import { default as ReactSelect } from 'react-select';
然后创建一个自定义组件,该组件定义一个名为“allowSelectAll”的新属性,并在该属性设置为“true”时选择所有选项

const Select = props => {
    if (props.allowSelectAll) {
        if (props.value && (props.value.length === props.options.length)) {
            return (
                <ReactSelect
                    {...props}
                    value={[props.allOption]}
                    onChange={selected => props.onChange(selected.slice(1))}
                />
            );
        }

        return (
            <ReactSelect
                {...props}
                options={[props.allOption, ...props.options]}
                onChange={selected => {
                    if (
                        selected.length > 0 &&
                        selected[selected.length - 1].value === props.allOption.value
                    ) {
                        return props.onChange(props.options);
                    }
                    return props.onChange(selected);
                }}
            />
        );
    }

    return <ReactSelect {...props} />;
};

Select.propTypes = {
    options: PropTypes.array,
    value: PropTypes.any,
    onChange: PropTypes.func,
    allowSelectAll: PropTypes.bool,
    allOption: PropTypes.shape({
        label: PropTypes.string,
        value: PropTypes.string
    })
};

Select.defaultProps = {
    allOption: {
        label: "Select all",
        value: "*"
    }
};
const Select=props=>{
if(props.allowSelectAll){
if(props.value&&(props.value.length==props.options.length)){
返回(
props.onChange(selected.slice(1))}
/>
);
}
返回(
{
如果(
选定的长度>0&&
选定的[选定的]le
<Select allowSelectAll={true} isMulti={true} isSearchable={true} options={options} />