Formik 是一个用于 React 的库,旨在简化表单的状态管理和验证。它通过将表单状态提升到组件外部来减少样板代码,使得表单处理更加直观和高效。
Material-UI 是一个流行的 React UI 框架,提供了丰富的组件库,这些组件遵循 Google 的 Material Design 设计规范。它使得开发者能够快速构建出美观且响应迅速的用户界面。
React Testing Library 是一个用于测试 React 组件的库,它鼓励开发者编写用户行为驱动的测试,而不是关注组件的内部实现细节。
解决方法:
npm install formik yup @material-ui/core
import React from 'react';
import { Formik, Form, Field } from 'formik';
import * as Yup from 'yup';
import { TextField, Button } from '@material-ui/core';
const validationSchema = Yup.object().shape({
name: Yup.string().required('Name is required'),
email: Yup.string().email('Invalid email').required('Email is required'),
});
const MyForm = () => (
<Formik
initialValues={{ name: '', email: '' }}
validationSchema={validationSchema}
onSubmit={(values) => {
console.log(values);
}}
>
{({ errors, touched }) => (
<Form>
<Field
as={TextField}
label="Name"
name="name"
error={touched.name && Boolean(errors.name)}
helperText={touched.name && errors.name}
/>
<Field
as={TextField}
label="Email"
name="email"
error={touched.email && Boolean(errors.email)}
helperText={touched.email && errors.email}
/>
<Button type="submit" variant="contained" color="primary">
Submit
</Button>
</Form>
)}
</Formik>
);
export default MyForm;
import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import MyForm from './MyForm';
test('submits the form', () => {
const { getByLabelText, getByText } = render(<MyForm />);
fireEvent.change(getByLabelText('Name'), { target: { value: 'John' } });
fireEvent.change(getByLabelText('Email'), { target: { value: 'john@example.com' } });
fireEvent.click(getByText('Submit'));
// 这里可以添加断言来验证表单提交后的行为
});
通过上述方法,你可以有效地集成 Formik 和 Material-UI,并使用 React Testing Library 对你的表单组件进行测试。
领取专属 10元无门槛券
手把手带您无忧上云