Skip to content

Commit 148d713

Browse files
authored
fix(NumberPicker): optimize delete value from 1.x to 1. while under control, close alibaba-fusion#3698 (alibaba-fusion#3700)
1 parent 7c3da1c commit 148d713

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

src/number-picker/number-picker.jsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,9 @@ class NumberPicker extends React.Component {
211211
if ('value' in nextProps && `${nextProps.value}` !== `${prevState.value}`) {
212212
const newValue = value === undefined || value === null ? '' : stringMode ? `${value}` : value;
213213
state.value = newValue;
214-
state.displayValue = newValue;
214+
if (Number(prevState.displayValue) !== nextProps.value) {
215+
state.displayValue = newValue;
216+
}
215217
}
216218

217219
// 如果是undefined或null,应该不限制最大最小值
@@ -278,6 +280,7 @@ class NumberPicker extends React.Component {
278280
} else {
279281
this.setDisplayValue({ displayValue: this.state.value });
280282
}
283+
281284
this.setFocus(false);
282285
const { onBlur } = this.props;
283286
onBlur && onBlur(e, ...args);

test/number-picker/index-spec.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,24 @@ describe('number-picker', () => {
322322
done();
323323
});
324324

325+
it('onChange value 1.9 -> 1. should input displayValue === 1. onchange value === 1', done => {
326+
const onChange = (value) => {
327+
assert(value === 1)
328+
done();
329+
};
330+
let wrapper = mount(
331+
<NumberPicker value={1.9} onChange={onChange} precision={1} />
332+
);
333+
wrapper
334+
.find('input')
335+
.simulate('change', { target: { value: '1.' } });
336+
assert(wrapper.find('input').prop('value') === "1.");
337+
wrapper.setProps({value: 1});
338+
assert(wrapper.find('input').prop('value') === "1.");
339+
wrapper.find('input').simulate('blur');
340+
assert(wrapper.find('input').prop('value') === 1);
341+
})
342+
325343
it('should leave out digits larger than precision set', done => {
326344
let wrapper = mount(
327345
<NumberPicker defaultValue={0} precision={1} />
@@ -459,7 +477,7 @@ describe('number-picker', () => {
459477
wrapper
460478
.find('input')
461479
.simulate('change', { target: { value: '20' } });
462-
assert(wrapper.find('input').prop('value') === 20);
480+
assert(wrapper.find('input').prop('value') === '20');
463481
wrapper.find('input').simulate('blur');
464482
assert(wrapper.find('input').prop('value') === 20);
465483

@@ -588,7 +606,6 @@ describe('number-picker', () => {
588606
assert(wrapper.find('input').prop('value') == '-0.');
589607
wrapper.find('input').simulate('blur');
590608
assert(wrapper.find('input').prop('value') == '-0');
591-
// 值实际无变化,不触发onChange
592609
assert(onChange.calledOnce);
593610

594611
wrapper = mount(

0 commit comments

Comments
 (0)