Skip to content

Commit f8afe77

Browse files
committed
Fixed react warning: switching input element from uncontrolled to controlled.
Making display of date dependent on "value" prop causes react to display a warning and also causes quirky display when clearing the field.
1 parent e060ea7 commit f8afe77

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

demo/src/Demo.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,17 @@ export default class Demo extends React.Component {
2525
const randomMilliseconds = getRandomValue(0, Date.now())
2626
this.setState({ selectedDate: moment(randomMilliseconds) })
2727
}
28-
28+
2929
render() {
3030
return (
3131
<div>
3232
<div className="random-container">
33-
<RaisedButton primary
33+
<RaisedButton primary
3434
label="Set random"
35-
onClick={this.setRandomValue}
35+
onClick={this.setRandomValue}
3636
/>
3737
</div>
38-
38+
3939
<DateTimePicker
4040
ref="picker"
4141
className="datepicker"
@@ -45,7 +45,6 @@ export default class Demo extends React.Component {
4545
floatingLabelText="Get my date"
4646
format={this.state.format}
4747
timePickerDelay={this.state.delay}
48-
value={this.state.selectedDate}
4948
onChange={selectedDate => this.setState({ selectedDate })}
5049
/>
5150

src/DateTimePicker.jsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export default class DateTimePicker extends Component {
5151
hideCalendarDate: PropTypes.bool,
5252
firstDayOfWeek: PropTypes.number,
5353
onDatePickerDismiss: PropTypes.func,
54-
value: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number]),
54+
customValue: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number]),
5555
maxDate: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number]),
5656
minDate: PropTypes.oneOfType([PropTypes.object, PropTypes.string, PropTypes.number]),
5757

@@ -66,7 +66,7 @@ export default class DateTimePicker extends Component {
6666
}
6767

6868
static defaultProps = {
69-
value: undefined,
69+
customValue: undefined,
7070
okLabel: 'OK',
7171
minDate: undefined,
7272
maxDate: undefined,
@@ -113,16 +113,16 @@ export default class DateTimePicker extends Component {
113113
}
114114

115115
// eslint-disable-next-line
116-
getInitialTime = () => this.props.value
117-
? moment(this.props.value)
116+
getInitialTime = () => this.props.customValue
117+
? moment(this.props.customValue)
118118
: null
119119

120120
state = {
121121
dateTime: this.getInitialTime(),
122122
}
123123

124124
componentDidUpdate = (prevProps) => {
125-
if (prevProps.value !== this.props.value) {
125+
if (prevProps.customValue !== this.props.customValue) {
126126
this.setState({ dateTime: this.getInitialTime() });
127127
}
128128
}
@@ -221,8 +221,7 @@ export default class DateTimePicker extends Component {
221221
onDateSelected,
222222
onTimeSelected,
223223
disabled,
224-
placeholder,
225-
value,
224+
customValue,
226225
...other
227226
} = this.props;
228227

@@ -232,21 +231,21 @@ export default class DateTimePicker extends Component {
232231
onFocus={this.handleFocus}
233232
className={textFieldClassName}
234233
onClick={this.openDatePicker}
235-
value={value ? this.getDisplayTime() : placeholder}
234+
value={this.getDisplayTime()}
236235
style={{ ...styles.textField, ...textFieldStyle }}
237236
disabled={disabled}
238237
{...other}
239238
/>
240239

241240
{
242241
clearIcon
243-
? <IconButton
242+
? <IconButton
244243
onClick={this.clearState}
245244
style={{ ...styles.clearIcon, ...clearIconStyle }}
246245
disabled={disabled}>
247246
{ clearIcon }
248247
</IconButton>
249-
: null
248+
: null
250249
}
251250

252251
<DatePicker

0 commit comments

Comments
 (0)