id: errormessage title:

custom_edit_url: https://github.com/jaredpalmer/formik/edit/master/docs/api/errormessage.md

<ErrorMessage />是一个组件,如果访问了该字段,则呈现给定字段的错误消息(即touched[name] === true)(并且有一个error留言)。它期望所有错误消息都作为字符串存储在给定字段中。喜欢<Field /><FastField />,和<FieldArray />,支持类似lodash的点路径和括号语法。

  1. import React from 'react';
  2. import { Formik, Form, Field, ErrorMessage } from 'formik';
  3. import * as Yup from "yup";
  4. const SignupSchema = Yup.object().shape({
  5. name: Yup.string()
  6. .min(2, 'Too Short!')
  7. .max(70, 'Too Long!')
  8. .required('Required'),
  9. email: Yup.string()
  10. .email('Invalid email')
  11. .required('Required'),
  12. });
  13. export const ValidationSchemaExample = () => (
  14. <div>
  15. <h1>Signup</h1>
  16. <Formik
  17. initialValues={{
  18. name: '',
  19. email: '',
  20. }}
  21. validationSchema={SignupSchema}
  22. onSubmit={values => {
  23. // same shape as initial values
  24. console.log(values);
  25. }}
  26. >
  27. {({ errors, touched }) => (
  28. <Form>
  29. <Field name="name" />
  30. - {errors.name && touched.name ? (
  31. - <div>{errors.name}</div>
  32. - ) : null}
  33. + <ErrorMessage name="name" />
  34. <Field name="email" type="email" />
  35. - {errors.email && touched.email ? (
  36. - <div>{errors.email}</div>
  37. - ) : null}
  38. + <ErrorMessage name="email" />
  39. <button type="submit">Submit</button>
  40. </Form>
  41. )}
  42. </Formik>
  43. </div>
  44. );

道具

\


参考

道具

children

children?: ((message: string) => React.ReactNode)

一个返回有效React元素的函数。只有在触摸了字段并且存在错误时才会调用。

  1. // the render callback will only be called when the
  2. // field has been touched and an error exists and subsequent updates.
  3. <ErrorMessage name="email">{msg => <div>{msg}</div>}</ErrorMessage>

component

component?: string | React.ComponentType<FieldProps>

要么是React组件,要么是要呈现的HTML元素的名称。如果没有指定,<ErrorMessage>只会返回一个字符串。

  1. <ErrorMessage component="div" name="email" />
  2. // --> {touched.email && error.email ? <div>{error.email}</div> : null}
  3. <ErrorMessage component="span" name="email" />
  4. // --> {touched.email && error.email ? <span>{error.email}</span> : null}
  5. <ErrorMessage component={Custom} name="email" />
  6. // --> {touched.email && error.email ? <Custom>{error.email}</Custom> : null}
  7. <ErrorMessage name="email" />
  8. // This will return a string. React 16+.
  9. // --> {touched.email && error.email ? error.email : null}

name

name: string 需要

Formik状态下的字段名称。要访问嵌套对象或数组,name也可以接受像lodash一样的点路径social.facebook要么friends[0].firstName

render

render?: (error: string) => React.ReactNode

一个返回有效React元素的函数。只有在触摸了字段并且存在错误时才会调用。

  1. // the render callback will only be called when the
  2. // field has been touched and an error exists and subsequent updates.
  3. <ErrorMessage name="email" render={msg => <div>{msg}</div>} />