Skip to content

Commit ee508fb

Browse files
authored
fix: Select should reset when value change to undefined (#443)
* Should reset when value reset to undefined * update test case * skip init value
1 parent e3180cc commit ee508fb

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

src/generate.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,15 @@ export default function generateSelector<
377377
const baseValue =
378378
value !== undefined && value !== null ? value : innerValue;
379379

380+
// Should reset when controlled to be uncontrolled
381+
const prevValueRef = React.useRef(value);
382+
React.useEffect(() => {
383+
if (prevValueRef.current !== value && value === undefined) {
384+
setInnerValue(undefined);
385+
}
386+
prevValueRef.current = value;
387+
}, [value]);
388+
380389
/** Unique raw values */
381390
const mergedRawValue = React.useMemo<RawValueType[]>(
382391
() =>

tests/Select.test.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1448,4 +1448,13 @@ describe('Select.Basic', () => {
14481448
wrapper.find('input').simulate('change', 'Z');
14491449
expect(wrapper.find('List').props().data).toHaveLength(1);
14501450
});
1451+
1452+
it('reset value to undefined should reset display value', () => {
1453+
const wrapper = mount(<Select value="light" />);
1454+
expect(wrapper.find('.rc-select-selection-item').text()).toEqual('light');
1455+
1456+
wrapper.setProps({ value: undefined });
1457+
wrapper.update();
1458+
expect(wrapper.find('.rc-select-selection-item')).toHaveLength(0);
1459+
});
14511460
});

0 commit comments

Comments
 (0)