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
hackery直接从DOM获取匹配的搜索结果,尽管这种方法不起作用,因为getElementsByClassName
onInputChanged
- 尝试搜索“apple”,然后按“将所有匹配项添加到选择”
- 正如@wdm所提到的,有一个
可以连接到李>onInputChanged
- 在
中,获取匹配项并将其存储在组件的状态中onInputChanged
- 我在
附近添加了一个按钮,允许用户选择将匹配的项目集复制到另一个状态变量Select
chosenItems
react select
组件有一个select
属性,您可以提供该属性以编程方式选择项目。我将值
传递给此state.chosenItems
- 在匹配筛选器的项出现之前,将调用
处理程序。我试图通过DOM查询获取匹配项,但没有成功,因为onInputChanged
太早了。因此,我不依赖于onInputChanged
的过滤逻辑,而是在react select
处理程序中复制过滤逻辑。这不是很好,因为我的筛选逻辑和显示的匹配项列表之间可能存在差异onInputChanged
- 每当键入搜索后单击时,
将清除搜索,这将再次调用react select
事件。因此,通过单击自定义的“添加所有匹配项”按钮,它将删除过滤器,清除列表,调用onInputChanged
,并使用新的匹配项列表设置状态。为了解决这个问题,我需要有一个onInputChanged
状态变量,它跟踪上一次调用previousMatchingOptions
中的匹配项。这似乎是一个可怕的黑客onInputChanged
- 同样,我试图根据当前是否有多个项目与搜索匹配来隐藏/显示我的“选择所有匹配的项目”按钮,但同样由于时间问题而受阻。我试图绕过这一点,但总是被角落里的案子缠住
- 我为“选择所有匹配项”设计的UI感觉与
集成得不太好。如果它是他们组件的一部分,而不是在它旁边,那就更好了react Select
- 通过使用
组件的Select
属性,您绕过了组件对其状态的内部管理,因此添加、删除、,如果不重新实现自定义values
处理程序中的所有内容,则无法清除项目,该处理程序将修改onChange
状态。选中的
将传递给
值。自己管理这件事似乎也不太可取
- 在我的
中,我尝试使用一些onInputChanged
hackery直接从DOM获取匹配的搜索结果,尽管这种方法不起作用,因为getElementsByClassName
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} />