Formik Yup即使满足要求也显示错误

时间:2019-10-02 17:45:44

标签: reactjs react-native formik yup

我希望TextInput正确地验证16位数字。我尝试了以下方法:

yup.number()
  .test('len', 'Must be exactly 16 numbers', val => val.length === 16)

但是,每次我在该字段中键入任何内容时,都会得到以下信息:

  

可能的未处理的承诺拒绝

我尝试了以下方法:

yup.number().max(16)

但是,即使我准确输入了16位数字,它仍然会抛出一个错误,提示它必须小于或等于16个字符。

更新了实现:

<Formik
   initialValues={{ someInput: Number }}
   onSubmit={submitHandler}
   validationSchema={yup.object().shape({
   someInput: yup
       .number()
       .test('len', 'Must be exactly 16 numbers', val => val.toString().length === 16)
       .positive()
       .integer()
       .required(),
})>

以下是我的TextInput

                                           <TextInput
                                                value={values.someInput}
                                                onChangeText={handleChange('someInput')}
                                                onBlur={() => setFieldTouched('someInput')}
                                                placeholder="some input"
                                                style={styles.someInput}
                                            />
                                            {touched.someInput && errors.someInput &&
                                                <Text style={{ fontSize: 10, color: 'red' }}>{errors.someInput}</Text>
                                            }

1 个答案:

答案 0 :(得分:1)

这是因为数字没有length属性。您需要先将其转换为字符串。另外,检查数字上的max会在任何大于16的数字而不是大于16位数字的数字上出错。

yup.number()
  .test('len', 'Must be exactly 16 numbers', val => val.toString().length === 16)