react-select:覆盖默认样式并删除可清除的 'x' 图标
react-select: Overwrite default styles and remove the clearable 'x' icon
感谢您提出这个问题。我实现了 react-select。
<Select
searchable
clearable
name="form-field-name"
options={options}
value={this.state.value}
onChange={this.onChange}
/>
将页面更改为RTL
时,我在所选选项的开头有一些space(padding-right
)。随附的屏幕截图说明了这一点。我尝试添加
.has-value.is-clearable.Select--single > .Select-control .Select-value {
padding-right: 10px;
}
我自己的 CSS,但这没有成功。请帮我解决它。
另一个问题,清除文本的'x' 我找不到删除它的方法,问题是它既不清除文本也无法删除。我用了两种方式 with/without searchable
属性。此外,它在单击时会生成错误,因为返回了空值(我使用控制台解决了这个问题)。请看下面的截图。
我不确定你的第一个问题。
要删除 'x',请将 isClearable
属性设置为 false
。
<Select
searchable
isClearable={false}
name="form-field-name"
options={options}
value={this.state.value}
onChange={this.onChange}
/>
您第一个问题的官方答案是创建自定义样式并覆盖原生 react-select 样式,如下所示:
(I think you have to override valueContainer
, but I leave you other props you can play with)
const AutocompleteStyles = {
control: (defaultStyles: any) => ({
...defaultStyles,
padding: '0',
}),
option: (defaultStyles: any, state: any) => ({
...defaultStyles,
backgroundColor: 'black',
'&:hover': {
backgroundColor: '#dcdcdc4c',
},
}),
singleValue: (defaultStyles: any) => ({
...defaultStyles,
padding: '0',
}),
valueContainer: (defaultStyles: any) => {
return {
...defaultStyles,
padding: '0',
};
},
placeholder: (defaultStyles: any) => {
return {
...defaultStyles,
padding: '0',
};
},
dropdownIndicator: (defaultStyles: any, state: any) => {
return {
...defaultStyles,
padding: '0',
};
},
indicatorSeparator: (defaultStyles: any) => {
return {
...defaultStyles,
display: 'none',
};
},
};
然后,将这些样式分配给您的 react-select 组件,如下所示:
<Select
...
styles={PeyaAutocompleteStyles}
/>
如你所见,你可以在方法中接收两个道具,第一个是默认样式,第二个是 react-select 状态,如果你想根据组件状态处理样式(就像您有一个选定的值或为空)。
有关详细信息,您可以查看 react-select 样式组件:
https://react-select.com/styles
感谢您提出这个问题。我实现了 react-select。
<Select
searchable
clearable
name="form-field-name"
options={options}
value={this.state.value}
onChange={this.onChange}
/>
将页面更改为RTL
时,我在所选选项的开头有一些space(padding-right
)。随附的屏幕截图说明了这一点。我尝试添加
.has-value.is-clearable.Select--single > .Select-control .Select-value {
padding-right: 10px;
}
我自己的 CSS,但这没有成功。请帮我解决它。
另一个问题,清除文本的'x' 我找不到删除它的方法,问题是它既不清除文本也无法删除。我用了两种方式 with/without searchable
属性。此外,它在单击时会生成错误,因为返回了空值(我使用控制台解决了这个问题)。请看下面的截图。
我不确定你的第一个问题。
要删除 'x',请将 isClearable
属性设置为 false
。
<Select
searchable
isClearable={false}
name="form-field-name"
options={options}
value={this.state.value}
onChange={this.onChange}
/>
您第一个问题的官方答案是创建自定义样式并覆盖原生 react-select 样式,如下所示:
(I think you have to override
valueContainer
, but I leave you other props you can play with)
const AutocompleteStyles = {
control: (defaultStyles: any) => ({
...defaultStyles,
padding: '0',
}),
option: (defaultStyles: any, state: any) => ({
...defaultStyles,
backgroundColor: 'black',
'&:hover': {
backgroundColor: '#dcdcdc4c',
},
}),
singleValue: (defaultStyles: any) => ({
...defaultStyles,
padding: '0',
}),
valueContainer: (defaultStyles: any) => {
return {
...defaultStyles,
padding: '0',
};
},
placeholder: (defaultStyles: any) => {
return {
...defaultStyles,
padding: '0',
};
},
dropdownIndicator: (defaultStyles: any, state: any) => {
return {
...defaultStyles,
padding: '0',
};
},
indicatorSeparator: (defaultStyles: any) => {
return {
...defaultStyles,
display: 'none',
};
},
};
然后,将这些样式分配给您的 react-select 组件,如下所示:
<Select
...
styles={PeyaAutocompleteStyles}
/>
如你所见,你可以在方法中接收两个道具,第一个是默认样式,第二个是 react-select 状态,如果你想根据组件状态处理样式(就像您有一个选定的值或为空)。
有关详细信息,您可以查看 react-select 样式组件: https://react-select.com/styles