I'm using react-hook-form for my input components, but there is one problem. In some text field, for example, text field for validation that take only number, i don't know how to do that, with normal textInput
, we can use regex, like
const [numberInput, setNumberInput] = useState("")
function onTextChanged(value) {
setNumberInput(value.replace(/[^0-9]/, ""))
}
and put that function and hook value on onTextChange
and value
respectively , i tried same method above on react-hook-form, but it won't work! i still can input other character like "+" or "-", of course using numeric keyboard
So here is TextField component
export interface HTextFieldProps extends TextFieldProps {
control: Control<any>
name: string
defaultValue?: string
}
/**
* Describe your component here
*/
export const HTextField = function HookformTextField(props: HTextFieldProps) {
const { name, control, defaultValue = "", ...restProps } = props
return (
<Controller
control={control}
name={name}
render={({ field: { onChange, value }, fieldState: { error } }) => (
<TextField
{...restProps}
onChangeText={onChange}
value={value}
defaultValue={defaultValue}
error={(error && error.message) as TxKeyPath}
/>
)}
defaultValue={defaultValue}
/>
)
}
Here is when i use this
<HTextField
onChangeText={(value) => onTextChanged(value)}
value={numberInput}
name={"times"}
control={control}
autoCapitalize="none"
keyboardType={Platform.OS === "android" ? "numeric" : "number-pad"}
returnKeyType="done"
inputStyle={INPUT_STYLE}
required
/>
So how can i use only number in react-hook-form look like this, thank you a lots
Check the docs (V7): https://react-hook-form.com/api/useform/register
<input
type="number"
{...register("test", {
valueAsNumber: true,
})}
/>
If not using type="number"
<input
{...register("test", {
valueAsNumber: true,
pattern:{
value: /^(0|[1-9]\d*)(\.\d+)?$/
},
})}
/>
You can still use validate
.
<input
{...register("test", {
valueAsNumber: true,
validate: (value) => value > 0,
})}
/>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With