我正在使用TextField组件来获取电话号码。当用户输入时,如果它不是数字或者不符合一定格式,我想使其无效并显示错误信息。目前,在没有触摸到该字段的情况下就会显示错误信息。我该如何实现这个行为呢?
非常感谢任何帮助。
我正在使用TextField组件来获取电话号码。当用户输入时,如果它不是数字或者不符合一定格式,我想使其无效并显示错误信息。目前,在没有触摸到该字段的情况下就会显示错误信息。我该如何实现这个行为呢?
非常感谢任何帮助。
从版本0.20.1开始,您可以使用helperText
和error
属性。
<TextField
hintText="Phone"
error ={this.state.errorText.length === 0 ? false : true }
floatingLabelText="Phone"
name="phone"
helperText={this.state.errorText}
onChange={this.onChange.bind(this)}/>
扩展 Larry 的答案,将 errorText 设置为状态中的一个属性(以下示例中的 errorText)。当 TextField 中的值更改时,验证输入并设置该属性(errorText)的值以显示和隐藏错误。
class PhoneField extends Component
constructor(props) {
super(props)
this.state = { errorText: '', value: props.value }
}
onChange(event) {
if (event.target.value.match(phoneRegex)) {
this.setState({ errorText: '' })
} else {
this.setState({ errorText: 'Invalid format: ###-###-####' })
}
}
render() {
return (
<TextField hintText="Phone"
floatingLabelText="Phone"
name="phone"
errorText= {this.state.errorText}
onChange={this.onChange.bind(this)}
/>
)
}
}
根据下方评论更新,errorText
被替换为helperText
class PhoneField extends Component
constructor(props) {
super(props)
this.state = { errorText: '', value: props.value }
}
onChange(event) {
if (event.target.value.match(phoneRegex)) {
this.setState({ errorText: '' })
} else {
this.setState({ errorText: 'Invalid format: ###-###-####' })
}
}
render() {
return (
<TextField hintText="Phone"
floatingLabelText="Phone"
name="phone"
helperText= {this.state.errorText}
onChange={this.onChange.bind(this)}
/>
)
}
}
errorText
已被替换为helperText
,而布尔值error
用来显示它作为错误文本。 - SpenhouetMaterial-UI v3.9.3 工作版本:
class UserProfile extends React.Component {
constructor(props) {
super(props);
this.state = { helperText: '', error: false };
}
onChange(event) {
if (event.target.value.length > 2) {
this.setState({ helperText: '', error: false });
} else {
this.setState({ helperText: 'Invalid format', error: true });
}
}
render() {
return (
<TextField
helperText={this.state.helperText}
onChange={this.onChange.bind(this)}
error={this.state.error}
required
id="outlined-required"
label="First Name"
/>
);
}
error={!!this.state.errorText}
。 - Daniel Jonce Evans