Если вы давно мечтали о простой, но мощной библиотеке проверки схемы для своего проекта React.js, то вас ждет угощение! В этом руководстве мы углубимся в мир Zod и узнаем, как настроить и использовать Zod.dev в ваших проектах React.js. К концу этого руководства вы сможете легко интегрировать Zod в свои проекты и сделать свою жизнь разработчика намного проще.

Предпосылки

Прежде чем мы начнем, убедитесь, что у вас есть следующее:

  1. Базовые знания React.js и TypeScript
  2. Node.js и npm установлены в вашей системе
  3. Новый или существующий проект React.js с включенным TypeScript (create-react-app)

Готовый? Давайте начнем!

Шаг 1: Установите Zod и его зависимости

Сначала перейдите в каталог вашего проекта и установите Zod вместе с его зависимостями:

npm install zod tslib

Шаг 2: Создайте новую схему Zod

В вашем проекте создайте новый каталог с именем schemas и внутри него создайте новый файл с именем userSchema.ts. Здесь мы определим нашу схему Zod для пользовательских данных.

Откройте userSchema.ts и добавьте следующий код:

import { z } from 'zod';

export const userSchema = z.object({
  name: z.string().min(1, 'Name is required'),
  email: z.string().email('Invalid email address'),
  age: z.number().min(18, 'Age must be at least 18'),
});

Здесь мы импортируем объект z из библиотеки Zod и создаем схему пользователя с тремя полями: name, email и age. Мы также применяем некоторые основные правила проверки к каждому полю.

Шаг 3: Создайте новый компонент React

Теперь давайте создадим новый компонент React, чтобы продемонстрировать, как использовать схему Zod в форме. В вашем каталоге src создайте новый файл с именем UserForm.tsx и добавьте следующий код:

import React, { useState } from 'react';
import { userSchema } from './schemas/userSchema';
import { z } from 'zod';

interface UserFormProps {}

interface FormErrors {
  name?: string;
  email?: string;
  age?: number;
}

const UserForm: React.FC<UserFormProps> = () => {
  const [formValues, setFormValues] = useState({
    name: '',
    email: '',
    age: '',
  });

  const [errors, setErrors] = useState<FormErrors>({});

  const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
    const { name, value } = event.target;
    setFormValues({ ...formValues, [name]: name === 'age' ? parseInt(value) : value });
  };

  const handleSubmit = async (event: React.FormEvent) => {
    event.preventDefault();
    try {
      const validValues = userSchema.parse(formValues);
      setErrors({});
      // Do something with the valid values, like sending them to an API
    } catch (error) {
      if (error instanceof z.ZodError) {
        setErrors(error.flatten().fieldErrors);
      }
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      {/* Render form fields and error messages */}
    </form>
  );
};

export default UserForm;

В этом компоненте мы импортируем userSchema и создаем форму с контролируемым состоянием для значений формы. У нас также есть состояние errors для хранения сообщений об ошибках от Zod.

При отправке формы мы пытаемся проанализировать значения формы, используя userSchema.parse(). Если значения допустимы, мы очищаем ошибки и продолжаем обработку допустимых значений. Однако, если есть ошибка проверки, мы перехватываем ее и обновляем состояние errors соответствующими сообщениями об ошибках.

Шаг 4. Визуализация полей формы и сообщений об ошибках

Теперь давайте отобразим поля формы и отобразим сообщения об ошибках, если есть какие-либо ошибки проверки. Обновите оператор return компонента UserForm.tsx следующим кодом:

return (
  <form onSubmit={handleSubmit}>
    <div>
      <label htmlFor="name">Name:</label>
      <input
        type="text"
        name="name"
        id="name"
        value={formValues.name}
        onChange={handleChange}
      />
      {errors.name && <span className="error">{errors.name}</span>}
    </div>
    <div>
      <label htmlFor="email">Email:</label>
      <input
        type="email"
        name="email"
        id="email"
        value={formValues.email}
        onChange={handleChange}
      />
      {errors.email && <span className="error">{errors.email}</span>}
    </div>
    <div>
      <label htmlFor="age">Age:</label>
      <input
        type="number"
        name="age"
        id="age"
        value={formValues.age}
        onChange={handleChange}
      />
      {errors.age && <span className="error">{errors.age}</span>}
    </div>
    <button type="submit">Submit</button>
  </form>
);

Здесь мы отображаем поля формы с соответствующими сообщениями об ошибках. Если есть ошибка для определенного поля, мы отображаем ее с помощью элемента span с className из error.

Шаг 5: Добавьте стили для сообщений об ошибках

Чтобы сообщения об ошибках выделялись, добавьте следующие правила CSS в основную таблицу стилей вашего проекта или создайте новый файл CSS и импортируйте его в UserForm.tsx:

.error {
  color: red;
  font-size: 12px;
  margin-left: 8px;
}

Теперь ваша форма должна отображать сообщения об ошибках красным цветом рядом с недопустимыми полями.

Шаг 6: вызовите новый компонент

Замените App.tsx на:

import './App.css';
import UserForm from './UserForm';

function App() {
  return (
    <div className="App">
      <UserForm />
    </div>
  );
}

export default App;

Шаг 7: Давайте проверим!

Теперь, когда вы реализовали проверку Zod в своем проекте React.js, пришло время протестировать функциональность и убедиться, что все работает должным образом.

Запустите сервер разработки

В терминале перейдите в каталог проекта и выполните следующую команду:

npm start

Это запустит ваш сервер разработки, и теперь ваш проект должен быть доступен по адресу http://localhost:3000.

Тест формы

Откройте браузер и перейдите к http://localhost:3000. Вы должны увидеть форму с полями для имени, электронной почты и возраста.

  • Во-первых, попробуйте отправить форму, не заполняя никаких полей. Вы должны увидеть сообщения об ошибках проверки для каждого поля, указывающие на то, что они обязательны.
  • Затем введите недопустимые данные для каждого поля (например, строку, не относящуюся к электронной почте, для поля электронной почты или отрицательное число для поля возраста). Вы должны увидеть соответствующие сообщения об ошибках для каждого поля.
  • Наконец, введите действительные данные для каждого поля и отправьте форму. Сообщения об ошибках должны исчезнуть, а отправка формы должна пройти так, как ожидалось (например, отправить данные в API или отобразить сообщение об успешном завершении).

Если все вышеперечисленные тесты дали ожидаемые результаты, поздравляем! Вы успешно интегрировали Zod.dev в свой проект React.js и реализовали форму с проверкой схемы.

Поздравляем!

Вы успешно настроили и использовали Zod в своем проекте React.js. Теперь вы знаете, как создавать схемы Zod, интегрировать их в свои компоненты и отображать сообщения об ошибках для недопустимых полей формы.

Zod предлагает простой, но мощный способ проверки схемы в ваших проектах React.js. Включив его в свой рабочий процесс, вы можете гарантировать, что ваши данные всегда действительны и соответствуют ожидаемой структуре.



Вот несколько полезных ресурсов, которые помогут вам глубже погрузиться в темы, затронутые в этом руководстве, а также связанные с ними темы, которые помогут расширить ваши знания и навыки в области веб-разработки:

  1. Документация по Zod: https://zod.dev/?id=introduction Узнайте больше о Zod, его функциях и о том, как эффективно использовать его для проверки схемы.
  2. Документация по React.js: https://react.dev/reference/react Расширьте свои знания о React.js и изучите более сложные концепции, шаблоны и лучшие практики.
  3. Документация по TypeScript: https://www.typescriptlang.org/docs/ Узнайте больше о TypeScript, его возможностях и о том, как он может улучшить рабочий процесс разработки.
  4. Formik: https://formik.org/ — популярная библиотека для управления состоянием формы и проверки в приложениях React.js. Сравните его с Zod, чтобы понять их различия и выбрать лучший инструмент для ваших нужд.
  5. Форма React Hook: https://react-hook-form.com/ — еще одна популярная библиотека форм, которая работает с React.js. Основное внимание уделяется предоставлению простого и эффективного способа управления состоянием и проверкой формы.
  6. Библиотека тестирования React: https://testing-library.com/docs/react-testing-library/intro/ Узнайте, как эффективно тестировать компоненты React.js, включая проверку форм. и обработка ошибок, чтобы ваше приложение работало должным образом.

Эти ресурсы должны предоставить вам прочную основу, на которую можно опираться, и помочь вам продолжать совершенствовать свои навыки в веб-разработке, React.js и обработке форм. Приятного обучения!