我使用react-hook-form作为我的输入组件,但有一个问题。在一些文本字段中,例如,只接受数字的文本字段验证,我不知道如何做到这一点,对于普通的textInput
,我们可以使用正则表达式,如
const [numberInput, setNumberInput] = useState("")
function onTextChanged(value) {
setNumberInput(value.replace(/[^0-9]/, ""))
}
然后把这个函数和钩子值分别放在onTextChange
和value
上,我在react-hook-form上试了同样的方法,但是不行!我仍然可以输入其他字符,比如“+”或“-”,当然是用数字键盘
这是TextField组件
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}
/>
)
}
这是我用这个的时候
<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
/>
所以我怎么能在react-hook-form中使用only number呢,看起来像这样,非常感谢
5条答案
按热度按时间tnkciper1#
查看文档(V7):https://react-hook-form.com/api/useform/register
如果不使用
type="number"
您可以使用
validate
。pnwntuvh2#
仅整数解
你可以只设置
<TextField />
proptype
到number
,然后只允许数字。前导零或指数的解决方案
正如注解中所指出的,这里是一个版本,通过使用RHF的validate函数,也接受前导零或指数符号。
j8yoct9x3#
用这样的东西
f0ofjuux4#
使用react-hook-form v7,这对我来说是有效的:
x33g5p2x5#
虽然来晚了点但我做到了
注意:
type='number' &
onChange={(e)=〉onChange(+e.target.value)}`允许我保存项目,当记录保存的数据时,我会得到以下信息。而如果不在onChange中添加
+
,