reactjs - 自定义(withStyle)受控材料-ui TextField 的奇怪行为
问题描述
我正在尝试在表单中使用 Material-ui TextField。此文本字段以仅授权十六进制字符的方式进行控制。
<form style={{ flex: '1' }} onSubmit={this.handleSubmit} noValidate autoComplete="off">
<TextField margin='normal' label="Base address" size="small" variant="outlined" fullWidth
InputProps={{ startAdornment: <InputAdornment position="start">0x</InputAdornment> }}
helperText="Please enter 8 hexadecimal digits"
value={this.state.address}
onChange={event => {
if (/^[0-9A-Fa-f]*$/.test(event.target.value))
this.setState({ address: event.target.value })
else this.setState({ address: this.state.address })
}}
/>
</form>
这按预期工作,没问题。但是当我用我的自定义的 CssTextField 替换 TextField
const CssTextField = withStyles({
root: {
'& label': {
color: 'var(--input-foreground)',
'&.Mui-focused': {
color: 'var(--inputValidation-infoBorder)',
},
},
'& input': {
color: 'var(--input-foreground)',
},
'& input:invalid + fieldset': {
borderColor: 'var(--inputValidation-errorBorder)',
},
'& .MuiFormHelperText-contained': {
color: 'var(--input-foreground)',
},
'& .MuiOutlinedInput-notchedOutline': {
borderColor: 'var(--input-foreground)',
},
'& .MuiOutlinedInput-root': {
'&:hover fieldset': {
borderColor: 'var(--thinput-foreground)',
},
'& fieldset': {
borderColor: 'var(--input-foreground)',
},
'&.Mui-focused fieldset': {
borderColor: 'var(--inputValidation-infoBorder)',
},
'& p.MuiTypography-colorTextSecondary': {
color: 'var(--input-foreground)',
},
},
},
})(TextField);
应用了新样式,但与 TextField 相比,CssTextField 的行为(不仅是样式)发生了变化。事实上,一旦我输入一个简单的字符,焦点就会从 CssTextField 中丢失,我需要在该字段中再次单击以输入一个新字符......这当然不会发生在“正常”TextField 中。
顺便说一句,当我在使用 CssTextField 时删除控件(删除道具值和 onChange)时,不会发生这种奇怪的行为。
所以我处于可以控制输入但不能控制样式的情况,或者我可以设置 TextField 的样式但不能控制输入!
附加信息:即使样式为空(在 withStyles 中仅设置 root:{}),也会出现问题。
任何建议都非常受欢迎。谢谢
解决方案
推荐阅读
- google-analytics - 新用户细分显示的新用户多于总用户?
- php - Magento 2 - 产品列表下方的额外类别描述
- c# - 如何在 VS 2019 中使用 Resharper 的“选择下一个事件”功能?
- r - 创建嵌套循环以分割数据框中的数据
- r - 带约束的 NLS 优化:曲线下面积相等
- javascript - 为什么延迟()或队列()jquery对我不起作用?
- azure - Power BI 将 OData.Query 限制为 Azure DevOps Server 中的 WorkItemSnapshot 10000 行
- rabbitmq - RabbitMQ - 内存使用和消息持久性
- python - 拟合对数曲线 - 或将其更改为适合
- node.js - 如何在nodejs(expressjs)中获取请求来源