首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何清除在react-datetime中输入的值?

如何清除在react-datetime中输入的值?
EN

Stack Overflow用户
提问于 2017-09-05 18:53:16
回答 2查看 10.9K关注 0票数 12

我为我们的日历control.Now使用了react-datetime,问题是,如果用户输入了一个无效的日期,比如'djfdjfhjkhdf‘,那么在这个控件中就没有什么可以模糊的了。我决定编写我自己的验证函数,并在validate.So事件上调用它,如果日期无效,则清除user.My代码输入的文本,如下所示:

代码语言:javascript
复制
import DatePicker from 'react-datetime';

focousOut(value) {
if (!validateDate(value)) {
  this.setState({ startDate:  ''});
  this.setState({ selectedValue: '' });
 }
}
handleChange(date) {
 this.setState({ selectedValue: date });
 this.setState({ startDate: date });
}

<Datetime
  timeFormat={false}
  value={this.state.selectedValue}
  defaultValue={this.state.startDate}
  onChange={this.handleChange}
  onBlur={this.focousOut}
  locale='en-US'
  dateFormat
  closeOnSelect
/>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-05 19:32:18

其中一个问题似乎是,基于给定的属性,您正在创建受控和非受控Datetime组件的混合。基本上,如果需要状态控制组件,请使用value,或者使用defaultValue让DOM管理输入值。

请参阅文档的this part

value -表示组件选择的日期,以便将其用作controlled component。此属性由Moment.js解析,因此可以使用date stringmoment对象。

defaultValue -表示组件将其用作uncontrolled component的选定日期。此属性由Moment.js解析,因此可以使用date stringmoment对象。

看看我做的这个。

代码语言:javascript
复制
var date = new Date();

class App extends React.Component {
  constructor() {
    super();
    this.state = {selectedValue: ''};
    this.focousOut = this.focousOut.bind(this);
    this.handleChange = this.handleChange.bind(this);
  }
  
  focousOut(value) {
    if(!moment(value).isValid()) {
     this.setState({selectedValue: ''}); 
    }
  }
  
  handleChange(date) {
   this.setState({ selectedValue: date });
  }

  render() {
    return (
       <Datetime
         timeFormat={false}
         value={this.state.selectedValue}
         onChange={this.handleChange}
         onBlur={this.focousOut}
         locale='en-US'
         dateFormat
         closeOnSelect
       />
    );
  }
}

React.render(<App />, document.body);

此外,还可以使用moment.js库轻松确定字符串是否为有效的日期格式。只需使用moment().isValid()即可。

我应该注意到,onBlur事件似乎在第二次模糊时触发。不确定这是为什么,但也许你会在文档中找到答案。以上只是对您现有代码的一个修复,希望对您的入门有一个有用的指导。

票数 7
EN

Stack Overflow用户

发布于 2020-11-24 00:28:45

是的,如果您试图在受控组件模式下传递一个null或空值,那么组件中显然存在一个呈现错误:内部输入仍然获得与日历一起输入的前一个值(不受控制?)尽管that.state.value是空的:我已经能够用renderInput属性“修补”它:

代码语言:javascript
复制
<Datetime
   value={(this.state.date) ? this.state.date : ''} 
   onChange={(value) => { this.setState{(date : ((value) && (isNaN(new Date(value)) === false)) ? new Date(value)).format('yyyy-mm-dd')  null, attribute) }} 
   renderInput={(props) => {
       return <input {...props} value={(this.state.date) ? props.value : ''} />
   }}
/>
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46053202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档