reactjs - React mui自动完成选择不显示价值
问题描述
我正在使用react-select
. 我已经使用了他们演示中的代码,但是我没有在本地处理 onChange 和 state,而是从作为自动完成选择组件的父级的其他组件执行此操作。
这是我的实现:
function NoOptionsMessage(props) {
return (
<Typography
color="textSecondary"
className={props.selectProps.classes.noOptionsMessage}
{...props.innerProps}
>
{props.children}
</Typography>
);
}
function inputComponent({ inputRef, ...props }) {
return <div ref={inputRef} {...props} />;
}
function Control(props) {
return (
<TextField
fullWidth
InputProps={{
inputComponent,
inputProps: {
className: props.selectProps.classes.input,
inputRef: props.innerRef,
children: props.children,
...props.innerProps,
},
}}
{...props.selectProps.textFieldProps}
/>
);
}
function Option(props) {
return (
<MenuItem
buttonRef={props.innerRef}
selected={props.isFocused}
component="div"
style={{
fontWeight: props.isSelected ? 500 : 400,
}}
{...props.innerProps}
>
{props.children}
</MenuItem>
);
}
function Placeholder(props) {
return (
<Typography
color="textSecondary"
className={props.selectProps.classes.placeholder}
{...props.innerProps}
>
{props.children}
</Typography>
);
}
function SingleValue(props) {
return (
<Typography className={props.selectProps.classes.singleValue} {...props.innerProps}>
{props.children}
</Typography>
);
}
function ValueContainer(props) {
return <div className={props.selectProps.classes.valueContainer}>{props.children}</div>;
}
function MultiValue(props) {
return (
<Chip
tabIndex={-1}
label={props.children}
className={classNames(props.selectProps.classes.chip, {
[props.selectProps.classes.chipFocused]: props.isFocused,
})}
onDelete={props.removeProps.onClick}
deleteIcon={<CancelIcon {...props.removeProps} />}
/>
);
}
function Menu(props) {
return (
<Paper square className={props.selectProps.classes.paper} {...props.innerProps}>
{props.children}
</Paper>
);
}
const components = {
Control,
Menu,
MultiValue,
NoOptionsMessage,
Option,
Placeholder,
SingleValue,
ValueContainer,
};
class AutocompleteSelect extends React.Component {
render() {
const { classes, theme, options, value, handleChange, placeholder, isClearable, isMulti } = this.props;
const selectStyles = {
input: base => ({
...base,
color: theme.palette.text.primary,
'& input': {
font: 'inherit',
},
}),
};
return (
<NoSsr>
<Select
classes={classes}
styles={selectStyles}
options={options}
components={components}
value={value}
onChange={(event) => handleChange(event.value)}
placeholder={placeholder}
isClearable={isClearable}
isMulti={isMulti}
/>
</NoSsr>
);
}
}
AutocompleteSelect.propTypes = {
classes: PropTypes.object.isRequired,
theme: PropTypes.object.isRequired,
handleChange: PropTypes.func.isRequired,
options: PropTypes.array.isRequired,
};
AutocompleteSelect.defaultProps = {
isClearable: false,
isMulti: false,
placeholder: '',
value: undefined,
};
export default withStyles(styles, { withTheme: true })(AutocompleteSelect);
我可以在浏览器控制台中看到我得到了value
字段select
,并且state
父组件中的 正在正确更新onChange
事件,但是字段的值没有被呈现。我在这里做错了什么?
解决方案
推荐阅读
- node.js - fastify-jwt 使用用户 ID 有效负载签名令牌
- java-8 - java.lang.OutOfMemoryError:在 hybris 中放置订单时出现 Java 堆空间错误
- python - 存储数据并在 Python 中重新访问数据的最佳方式
- python-3.x - Dita_scans 的乐趣:NameError: name 'outputclass' is not defined
- javascript - 如何在 JavaScript 中更改数组内的嵌套对象值?
- javascript - Reactjs 从通过 map 函数呈现的列表中仅扩展 1 个列表项
- azure - 如何使用 ARM 模板或 Azure.NetSDK 更改现有的 Azure 虚拟机大小
- reactjs - 使用带有 i18next.t() 的数字变量来生成 gettext .po 文件
- c++ - QStringList 中的分段错误
- c# - (区别在于)使用 C# 删除 openxml 中的段落