diff --git a/components/date-picker/RangePicker.tsx b/components/date-picker/RangePicker.tsx index 50e78ea797..cf66d680aa 100644 --- a/components/date-picker/RangePicker.tsx +++ b/components/date-picker/RangePicker.tsx @@ -5,6 +5,7 @@ import { polyfill } from 'react-lifecycles-compat'; import RangeCalendar from 'rc-calendar/lib/RangeCalendar'; import RcDatePicker from 'rc-calendar/lib/Picker'; import classNames from 'classnames'; +import shallowequal from 'shallowequal'; import Icon from '../icon'; import Tag from '../tag'; import warning from '../_util/warning'; @@ -77,8 +78,13 @@ class RangePicker extends React.Component { const value = nextProps.value || []; state = { value, - showDate: getShowDateFromValue(value) || prevState.showDate, }; + if (!shallowequal(nextProps.value, prevState.value)) { + state = { + ...state, + showDate: getShowDateFromValue(value) || prevState.showDate, + }; + } } if (('open' in nextProps) && prevState.open !== nextProps.open) { state = { diff --git a/components/date-picker/createPicker.tsx b/components/date-picker/createPicker.tsx index c2ed5dcda8..959af2dceb 100644 --- a/components/date-picker/createPicker.tsx +++ b/components/date-picker/createPicker.tsx @@ -23,14 +23,20 @@ export default function createPicker(TheCalendar: React.ComponentClass): any { showToday: true, }; - static getDerivedStateFromProps(nextProps: PickerProps) { + static getDerivedStateFromProps(nextProps: PickerProps, prevState: any) { + let state = null; if ('value' in nextProps) { - return { + state = { value: nextProps.value, - showDate: nextProps.value, }; + if (nextProps.value !== prevState.value) { + state = { + ...state, + showDate: nextProps.value, + }; + } } - return null; + return state; } private input: any;