Tomo uma referência do documento oficial
https://chakra-ui.com/docs/components/number-input
O usuário de exemplo pode clicar no ícone inc e dec para alterar o valor e também inserir diretamente na caixa de texto.
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>
);
Aí quero alterar o valor com outros botões, então tento usar setState
. Depois de algumas tentativas, descobri que não conseguia usar defaultValue
in useNumberInput
, então uso value
and 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>
);
Está tudo bem, mas tenho um problema: o usuário não consegue digitar o ponto decimal Input
diretamente.
Como corrigi-lo ?
Aqui está meu exemplo de sandbox:
https://codesandbox.io/p/devbox/twk7v6?file=%2Fsrc%2Findex.tsx%3A19%2C18