我参考了官方文档
https://chakra-ui.com/docs/components/number-input
示例用户可以单击 inc 和 dec 图标来更改值,也可以直接在文本框中输入。
import {
ChakraProvider,
Stack,
HStack,
Button,
Input,
useNumberInput
} from "@chakra-ui/react";
const { getInputProps, getIncrementButtonProps, getDecrementButtonProps } =
useNumberInput({
step: 0.01,
defaultValue: 0.5,
min: 0.01,
max: 1.0,
precision: 2,
})
const inc = getIncrementButtonProps()
const dec = getDecrementButtonProps()
const input = getInputProps()
return (
<Stack>
<HStack maxW='320px'>
<Button {...inc}>+</Button>
<Input {...input} />
<Button {...dec}>-</Button>
</HStack>
</Stack>
);
然后我想用其他按钮改变值,所以我尝试使用setState
,经过一番尝试发现不能使用defaultValue
in useNumberInput
,所以我使用value
和onChange
。
const [limiInputValue, setLimitInputValue] = useState(0.5);
const { getInputProps, getIncrementButtonProps, getDecrementButtonProps } =
useNumberInput({
step: 0.01,
// defaultValue: limiInputValue,
min: 0.01,
max: 1.0,
precision: 2,
value: limiInputValue,
onChange: value => {
console.log('onChange value', value);
setLimitInputValue(Number(value));
},
})
const inc = getIncrementButtonProps()
const dec = getDecrementButtonProps()
const input = getInputProps()
return (
<Stack>
<HStack maxW='320px'>
<Button {...inc}>+</Button>
<Input {...input} />
<Button {...dec}>-</Button>
</HStack>
<Button onClick={() => setLimitInputValue(0.25)}>Set</Button>
</Stack>
);
一切都很好,但我有一个问题是用户无法Input
直接输入小数点。
如何修复它?
这是我的沙箱示例:
https://codesandbox.io/p/devbox/twk7v6?file=%2Fsrc%2Findex.tsx%3A19%2C18