Appearance
yup schema 校验
yup是一个schema校验工具库,一般用于 formik 的表达检测
javascript
let schema = yup.object().shape({
name: yup.string().required(),
age: yup.number().required().positive().integer(),
email: yup.string().email(),
website: yup.string().url(),
createdOn: yup.date().default(function () {
return new Date();
}),
});
const validated = schema.validateSync({
name: 'Hulk',
age: 18,
});Formik
javascript
const validation = Yup.object({
timer: Yup.number()
.integer()
.required()
.min(AUTO_LOCK_TIMER_MIN_MINUTES)
.max(AUTO_LOCK_TIMER_MAX_MINUTES)
.label('Auto-lock timer'),
});
<Formik
initialValues={{ timer: autoLockInterval }}
validationSchema={validation}
onSubmit={async ({ timer }) => {
if (timer !== null) {
try {
await dispatch(setKeyringLockTimeout({ timeout: timer })).unwrap();
toast.success('Auto lock updated');
} catch (e) {
// log it?
}
}
}}
enableReinitialize={true}
/>Form-level Validation
javascript
import React from 'react';
import { Formik, Form, Field } from 'formik';
import * as Yup from 'yup';
const SignupSchema = Yup.object().shape({
firstName: Yup.string()
.min(2, 'Too Short!')
.max(50, 'Too Long!')
.required('Required'),
lastName: Yup.string()
.min(2, 'Too Short!')
.max(50, 'Too Long!')
.required('Required'),
email: Yup.string().email('Invalid email').required('Required'),
});
export const ValidationSchemaExample = () => (
<div>
<h1>Signup</h1>
<Formik
initialValues={{
firstName: '',
lastName: '',
email: '',
}}
validationSchema={SignupSchema}
onSubmit={values => {
// same shape as initial values
console.log(values);
}}
>
{({ errors, touched }) => (
<Form>
<Field name="firstName" />
{errors.firstName && touched.firstName ? (
<div>{errors.firstName}</div>
) : null}
<Field name="lastName" />
{errors.lastName && touched.lastName ? (
<div>{errors.lastName}</div>
) : null}
<Field name="email" type="email" />
{errors.email && touched.email ? <div>{errors.email}</div> : null}
<button type="submit">Submit</button>
</Form>
)}
</Formik>
</div>
);with test
javascript
const validation = object({
privateKey: yupString()
.ensure()
.trim()
.required()
.transform((value: string) => {
if (value.startsWith('0x')) {
return value.substring(2);
}
return value;
})
.test(
'valid-hex',
`\${path} must be a hexadecimal value. It may optionally begin with "0x".`,
(value: string) => {
try {
hexToBytes(value);
return true;
} catch (e) {
return false;
}
},
)
.test('valid-bytes-length', `\${path} must be either 32 or 64 bytes.`, (value: string) => {
try {
const bytes = hexToBytes(value);
return [32, 64].includes(bytes.length);
} catch (e) {
return false;
}
})
.label('Private Key'),
});type schema
[mixed](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23mixed)[string](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23string)[number](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23number)[boolean](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23boolean)[date](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23date)[array](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23array)[object](https://link.juejin.cn/?target=https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fyup%23object)其他
更新: 2023-07-31 14:33:47
原文: https://www.yuque.com/u3641/dxlfpu/gsl2e2p0fx3a4onx