私は使っている react-datepicker
カレンダーコントロール用。ここで問題となるのは、ユーザーが「djfdjfhjkhdf」のような無効な日付を入力した場合、このコントロールには検証するものが何もないということです。そこで、独自の検証関数を作成し、日付が無効な場合はblurイベントでそれを呼び出し、ユーザーが入力したテキストをクリアすることにしました。私のコードは次のようなものです:
import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';
focousOut(value) {
this.handleChange('');
}
handleChange(date) {
this.setState({ selectedValue: date });
this.setState({ startDate: date });
}
<DatePicker
selected={this.state.selectedValue}
value={this.state.startDate}
onChange={this.handleChange}
onBlur={event => this.focousOut(event.target.value)} />
validateDate
は、日付が有効な場合はtrue
またはfalse
を返す関数であり、日付が有効な場合はtrue
を返します。それ以外の場合はfalse
を返します。この要件をどのように達成できますか?私を助けてくれませんか?
私は最初に解決策が次のようにコントロールを追加することを発見しました:
<DatePicker
selected={this.state.selectedValue}
value={this.state.startDate}
onChange={this.handleChange}
onChangeRaw={(event) =>
this.handleChangeRaw(event.target.value)}
onBlur={event => this.focousOut(event.target.value)}
/>
ここで、イベントに次のコードを追加します。
handleChangeRaw(value) {
this.setState({ startDate: value });
}
handleChange(date) {
this.setState({ selectedValue: date });
}
focousOut(value) {
if (!validateDate(value)) {
this.setState({ startDate: '' });
this.setState({ selectedValue: moment() });
}
}
validateDate
は、日付を検証するために使用する関数です。 false
が返された場合は、日付が無効であることを意味します。この場合、値を初期状態にリセットします。