Ich habe vor kurzem auf redux-form
v6 aktualisiert, und meine material-ui
benutzerdefinierte Datetime Picker funktioniert nicht mehr. Hier ist, was es sieht aus wie jetzt:DateTimePicker Redux Formular Feld Probleme
class DateTimePicker extends React.Component {
handleDateChanged(e, value) {
let currentTime;
if (this.props.dateField.value) {
let currentValue = moment(this.props.dateField.value);
currentTime = currentValue.subtract(currentValue.clone().startOf('day'));
}
let newValue = moment(value).startOf('day').add(currentTime || 0);
this.props.dateField.onChange(newValue.toDate()); //this.refs.timePicker goes undefined when this line runs.
this.refs.timePicker.openDialog();
}
handleTimeChanged(e, value) {
return this.props.dateField.onChange(value); //This is called, but the value does not change.
}
formatDate(value) {
return moment.tz(value, this.props.timezone).format('M/D/YY HH:mm zz');
}
render() {
return (
<span>
<DatePicker
value={this.props.dateField.value || null}
autoOk={true}
maxDate={new Date()}
floatingLabelText="Change At"
floatingLabelStyle={{pointerEvents: 'none'}}
errorText={this.props.dateField.touched && this.props.dateField.error}
formatDate={this.formatDate.bind(this)}
onChange={this.handleDateChanged.bind(this)}
/>
<TimePicker
style={{display: 'none'}}
value={this.props.dateField.value || null}
format="24hr"
hintText="Time"
ref="timePicker"
onChange={this.handleTimeChanged.bind(this)}
/>
</span>
);
}
}
Und es ist in der Form verwendet, wie so:
<Field
name="changeAt"
component={({input}) => {
return <DateTimePicker dateField={input} timezone={this.props.driver.homeTerminal.timezone} />
}}
/>
Ich habe zwei verschiedene Probleme.
Erstes Problem: Wenn ich einen Tag auswählen, wird handleDateChanged
wie erwartet aufgerufen. Wenn die Methode startet, bezieht sich this.refs.timePicker
erwartungsgemäß auf die Zeitauswahl. Wenn die darüber liegende Zeile jedoch ausgeführt wird (this.props.dateField.onChange(newValue.toDate())
), gehen die Refs verloren und ändern sich in this.refs.timePicker
in undefined
.
Jede weitere Zeit, die ich ein Datum auswählen, Refs sind nicht verloren, und es funktioniert einwandfrei.
Zweites Problem: Wenn ich eine Zeit wählen, handleTimeChanged
aufgerufen, die this.props.dateField.onChange(value)
mit dem richtigen Wert nennt; Der Wert wird jedoch nicht geändert.
Alle Vorschläge sind willkommen.