I want to have an input
number that allows any float between 0-1 including both whole numbers. But it’s proving quite tricky just getting the backspace to actually delete a numbers as it comes as NaN
I got this:
JavaScript
x
17
17
1
const [rate, setRate] = useState<number>(0)
2
3
const addRate = (num: number) => {
4
if (typeof num !== 'number') {
5
setRate(0)
6
} else {
7
setRate(num)
8
}
9
}
10
11
12
<input
13
type='number'
14
value={rate}
15
onChange={e => addRate(parseFloat(e.target.value)}
16
/>
17
Advertisement
Answer
You can use achieve your goal with adding some conditions to the addRate
state, also using step
prop of input
element:
JavaScript
1
22
22
1
import { useState } from "react";
2
3
export default function App() {
4
const [rate, setRate] = useState(0);
5
6
const addRate = (num) => {
7
if (typeof num !== "number" || isNaN(num) || num > 1) {
8
setRate(0);
9
} else {
10
setRate(num);
11
}
12
};
13
return (
14
<input
15
type="number"
16
value={rate === 0 ? "" : rate}
17
step={0.01}
18
onChange={(e) => addRate(parseFloat(e.target.value))}
19
/>
20
);
21
}
22