【问题标题】:Material-UI Datepicker can't display error/required messagesMaterial-UI Datepicker 无法显示错误/必需的消息
【发布时间】:2018-06-29 18:01:43
【问题描述】:

我正在尝试在日期选择器上显示验证错误消息,就像我们使用 errorText 和 errorStyle 道具对 TextField 所做的一样,但验证错误消息不适用于 DatePicker。

我使用的是material-ui版本“^0.18.7”。

请在下面找到完整的功能。我不确定如何实现这一点。我也明白 errorText 和 errorStyle 不是 DatePicker 的有效道具。认为它适用于日期选择器,但事实并非如此。有没有办法做到这一点。

import DatePicker from 'material-ui/DatePicker';

constructor(props){
   super(props)
   const dateYesterday = new Date();
   dateYesterday.setDate(dateYesterday.getDate() - 1);
   this.state={
      dob: null,
      dobError: '',
      dateYesterday: dateYesterday
   }
   this.changeDateOfBirth = this.changeDateOfBirth.bind(this)
}

changeDateOfBirth = (evt, date) => {
if(date == null || date == undefined){
  this.setState({
    dobError: 'Please select your date of birth'
  });
}else{
  this.setState({
    dobError: '',
    dob: date
  });
}
}
const errorStyle = {
    display: 'table'
}

<DatePicker 
    dialogContainerStyle={{position: 'absolute'}} 
    errorText={this.state.dobError} 
    errorStyle={errorStyle} 
    inputStyle={myTheme.inputStyleText} 
    underlineStyle={myTheme.underlineStyle} 
    underlineFocusStyle={myTheme.underlineStyle} 
    floatingLabelStyle={myTheme.floatingLabelStyle} 
    floatingLabelText="Date Of Birth" 
    hintText="Select Date Of Birth" 
    container="inline" 
    locale="en-US" 
    firstDayOfWeek={0} 
    autoOk={true} 
    value={this.state.dob} 
    onChange={this.changeDateOfBirth} 
    defaultDate={this.state.dateYesterday}
 >
 </DatePicker>

请提出建议。

【问题讨论】:

  • 如果你可以更新到 v1,error 属性在日期选择器上可用。
  • 不,我无法更新到 v1。我的项目很大。如果你看 v1,一切都变了,它是全新的。如果我必须更新到 v1,那么我必须重新从头开始更改一切。有没有办法在不升级到 v1 的情况下解决这个问题?
  • 我可以使用 Snackbar 栏显示错误消息,但我想在 datepicker 下划线下方显示正常错误消息。由于我已经在使用快餐栏来显示服务器响应,所以我也不能将其用于验证消息。

标签: reactjs material-ui


【解决方案1】:

DatePicker 将道具传播到子元素,因此您实际上可以使用来自TextField 元素的errorTexterrorStyle 道具。例如,我在“^0.18.7”中测试了以下DatePicker,可以确认它显示为红色错误消息:

<DatePicker hintText="Portrait Dialog" errorText="This is an error message." />

您应该知道DatePicker 中的onChange 回调仅在选择日期时触发,因此date 参数永远不会为空或未定义。换句话说,你永远不会进入下面的if 语句:

if(date == null || date == undefined){
  this.setState({
    dobError: 'Please select your date of birth'
  });
}

如果您想检查用户没有设置任何日期的情况,请考虑检查您的 DOB 是否为空(我省略了不相关的道具以保持简短):

<DatePicker 
    errorText={this.state.dob ? {} : this.state.dobError} 
    errorStyle={this.state.dob ? {} : errorStyle} 
 >

【讨论】:

  • 谢谢朱尔斯。我会检查并确认这一点。
  • Jules 我还没有测试,因为我的笔记本电脑现在不在我身边。我会在这个星期五测试它并在这里更新。
  • Jules 你的答案很好,我在我的问题中发布的代码也很好。我在 Datepicker 之前有非强制性字段,因此它没有显示错误消息。只有在填写非必填字段后,当我再次单击提交时,它才会显示日期选择器错误消息。感谢您的宝贵时间。
猜你喜欢
  • 2020-06-08
  • 2022-10-24
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
相关资源
最近更新 更多