Это похоже на базовый c вопрос, но я был удивлен, что нигде не смог найти ответ, поэтому я привожу его здесь.
Ключ в обоих случаях - захват onkeydown
событие и запуск его метода preventDefault()
.
Ваниль HTML и javascript
<input type="number" min="0" max="100" step="2" value="10"
onkeydown="preventKeyboardInput(event)" />
<script>
function preventKeyboardInput(event) {
event.preventDefault();
}
</script>
Реакция
<input
type="number"
min={0}
max={100}
defaultValue={10}
step={2}
onKeyDown={(event) => {
event.preventDefault();
}}
/>
Material-UI
Material-UI's <TextField>
- это обертка вокруг <input>
реакции, поэтому все, что вам нужно сделать, это передать onKeyDown
через inputProps
, который вы уже используют для передачи min
, max
и defaultValue
.
const [value, setValue] = useState(10);
return (
<React.Fragment>
<TextField
name="name"
type="number"
label="label"
inputProps={{
min: 0,
max: 100,
step: 2,
onKeyDown: (event) => {
event.preventDefault();
},
}}
defaultValue={value}
onChange={(event) => {
setValue(Number(event.target.value));
}}
/>
</React.Fragment>
);