Как создать контактную форму в React с помощью KendoReact Form

KendoReact Form — это быстрый и небольшой пакет для управления состоянием формы, созданный на основе React и разработанный с учетом лучших практик. В этой статье мы рассмотрим, как разработать контактную форму с помощью этого компонента React Form.

Размер gzipped и minified пакета React Form составляет 5 КБ. Компонент интегрируется со всеми компонентами KendoReact и в настоящее время используется встроенным редактором планировщика KendoReact. Для получения состояния своего поля, обработки событий компонента и рендеринга пользовательских компонентов компонент React Form использует следующие компоненты:

  • Компонент KendoReact Field и интерфейс FieldRenderProps
  • компонент KendoReact FieldArray и интерфейс FieldArrayRenderProps.

Кроме того, когда вам необходимо создать макеты форм, библиотека KendoReact Form также предоставляет следующие компоненты:

  • компонент KendoReact FormElement
  • Компонент KendoReact FieldWrapper

В этом посте я продемонстрирую, как использовать компонент KendoReact Form для создания простой контактной формы React.

Предварительные условия

Чтобы следовать этому руководству, вам необходимо иметь:

  • React v16 или новее
  • базовое понимание React
  • редактор кода

Настройка проекта React

Те, кто уже знаком с созданием React-приложений с помощью npx, могут пропустить это, потому что далее я покажу, как запустить React-приложение для тех, кто не знаком.

Вам нужно выполнить следующие шаги, и вы получите сервер разработки приложений React, запущенный на вашей локальной машине. Во-первых, введите следующую команду в предпочитаемый вами интерфейс командной строки (CLI), затем выполните следующую команду-шаблон, предоставленную React, чтобы быстро настроить проект React для разработки.

npx create-react-app task-organizer --use-npm
cd task-organizer
npm start
Войти в полноэкранный режим Выйдите из полноэкранного режима

Найдите каталог проекта Task-organizer и откройте его в редакторе кода. Теперь вы можете начать с сокращения кодов в файле App.js, чтобы они выглядели следующим образом:

import "./App.css";

function App(){
    return <div classname="app"></div>
}
export default App;
Вход в полноэкранный режим Выход из полноэкранного режима

Теперь, когда мы закончили создание нашего React-приложения, давайте приступим к установке зависимостей для приложения.

Установка зависимостей

Далее, давайте добавим пакеты KendoReact, которые мы будем использовать для этого проекта. Я буду использовать тему KendoReact Default для этого проекта, но существуют и другие варианты — например, темы KendoReact Bootstrap и KendoReact Material.

Установите тему KendoReact Default, выполнив в терминале следующую команду.

npm install --save @progress/kendo-theme-default
Войти в полноэкранный режим Выход из полноэкранного режима

Интеграция нескольких компонентов KendoReact

KendoReact — это богатый набор из множества модульных компонентов. В этой демонстрации мы будем использовать несколько компонентов, импортированных из этой библиотеки React UI, для создания контактной формы. Ниже приведены зависимости и одноранговые зависимости; выполните команду, чтобы начать установку.

npm install --save @progress/kendo-react-form @progress/kendo-react-inputs @progress/kendo-react-labels @progress/kendo-drawing @progress/kendo-licensing @progress/kendo-react-intl
Войти в полноэкранный режим Выход из полноэкранного режима

Я уверен, что вы уже заметили область видимости @progress, которую мы использовали. Библиотека KendoReact предоставляет множество развязанных модулей для различных целей; все они имеют область видимости @progress (Progress Telerik является материнской компанией, создавшей KendoReact) — считайте, что это глобальная область видимости для модулей в KendoReact.

Примечание: KendoReact — это коммерческая библиотека UI-компонентов, и, как часть этого, вам нужно будет предоставить лицензионный ключ, когда вы будете использовать компоненты в своих проектах React. Вы можете получить лицензионный ключ через бесплатную пробную версию или приобрести коммерческую лицензию. Для получения дополнительной информации вы можете перейти на страницу лицензирования KendoReact.

Теперь, когда все необходимые модули установлены, давайте приступим к разработке контактной формы.

Контактная форма React

Начнем с импорта всех зависимостей, которые нам понадобятся; вставьте следующий код в файл App.js.

import * as React from "react";
import { Form, Field, FormElement } from "@progress/kendo-react-form";
import { Error } from "@progress/kendo-react-labels";
import { Input, TextArea } from "@progress/kendo-react-inputs";
import "@progress/kendo-theme-default";
Вход в полноэкранный режим Выйти из полноэкранного режима

Выше мы импортировали form, field, formElement из @progress/kendo-react-form, Error из @progress/kendo-react-labels, плюс Input и TextArea из @progress/kendo-react-inputs. Это те компоненты, которые будут использоваться для разработки приложения. Для импортированного @progress/kendo-theme-default мы добавили в наш компонент тему стилизации по умолчанию.

Давайте перейдем к написанию функциональности EmailInput. Введите следующий код под импортами в файл App.js:

const emailValidator = (value) =>
    emailRegex.test(value) ? "" : "Please enter a valid email.";
const EmailInput = (fieldRenderProps) => {
    const { validationMessage, visited, ...others } = fieldRenderProps;
    return (
    <div>
    <Input {...others} />
    {visited && validationMessage && <Error>{validationMessage}</Error>}
    </div>
    );
};
Вход в полноэкранный режим Выход из полноэкранного режима

В приведенном выше коде мы создали emailValidator, который хранит строку, представляющую собой условный набор, основанный на выводе emailRegex.test(value). Функция EmailInput получает аргумент fieldRenderProps и объекты validationMessage, visited и ...others деструктурируются из fieldRenderProps. Функция EmailInput также возвращает div, содержащий компонент input, который получает оставшиеся объекты(..other) и conditional отображает компонент Error с validationMessage.

Теперь, когда мы закончили с этим, давайте создадим нашу функцию App, которую мы будем отображать в браузере.

В функции EmailInput введите следующий код.

const App = () => {
    const handleSubmit = (dataItem) => alert(JSON.stringify(dataItem, null, 2));
    return (
    <Form
    onSubmit={handleSubmit}
    render={(formRenderProps) => (
    <FormElement
        style={{
        maxWidth: 750,
        margin: "3em auto",
        }}
    >
        <fieldset className={"k-form-fieldset"}>
        <legend className={"k-form-legend"}>Contact Form</legend>
        <div style={{ margin: "1em 0" }}>
        <Field name={"firstName"} component={Input} label={"Email"} />
        </div>
        <div style={{ margin: "1em 0" }}>
        <Field
        name={"lastName"}
        component={EmailInput}
        validator={emailValidator}
        label={"First Name"}
        />
        </div>
        <div style={{ margin: "2em 0" }}>
        <Field
        name={"email"}
        type={"email"}
        component={TextArea}
        label={"Email"}
        />
        </div>
        </fieldset>
        <div className="k-form-buttons">
        <button
        type={"submit"}
        className="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base"
        disabled={!formRenderProps.allowSubmit}
        >
        Submit
        </button>
        </div>
    </FormElement>
    )}
    />
    );
};
export default App;
Вход в полноэкранный режим Выйти из полноэкранного режима

Сначала мы создали стрелочную функцию handleSubmit, которая принимает dataItem в качестве аргумента и вызывает функцию alerts с данными JSON, содержащими dataItem, null и 2. Но вы можете заменить это на REST API, который вы хотите использовать. Функция App также возвращает Форму, которая использует реквизиты рендеринга (в основном для решения сквозных проблем), чтобы динамически вводить FormElement в качестве реквизита.

В компоненте FormElement есть три поля, которые обернуты fieldset. Каждое поле принимает следующие реквизиты: name, component, label и validator для поля email. Реквизит label обозначает поле, а реквизит component определяет, является ли поле input, textarea и т.д. Реквизит name присоединяется к данным поля при отправке формы, а реквизит validator используется полем email для проверки письма.

Вот полный код файла App.js.

import * as React from "react";
import { Form, Field, FormElement } from "@progress/kendo-react-form";
import { Error } from "@progress/kendo-react-labels";
import { Input, TextArea } from "@progress/kendo-react-inputs";
import "@progress/kendo-theme-default";
const emailRegex = new RegExp(/S+@S+.S+/);
const emailValidator = (value) =>
    emailRegex.test(value) ? "" : "Please enter a valid email.";
const EmailInput = (fieldRenderProps) => {
    const { validationMessage, visited, ...others } = fieldRenderProps;
    return (
    <div>
    <Input {...others} />
    {visited && validationMessage && <Error>{validationMessage}</Error>}
    </div>
    );
};
const App = () => {
    const handleSubmit = (dataItem) => alert(JSON.stringify(dataItem, null, 2));
    return (
    <Form
    onSubmit={handleSubmit}
    render={(formRenderProps) => (
    <FormElement
        style={{
        maxWidth: 750,
        margin: "3em auto",
        }}
    >
        <fieldset className={"k-form-fieldset"}>
        <legend className={"k-form-legend"}>Contact Form</legend>
        <div style={{ margin: "1em 0" }}>
        <Field name={"firstName"} component={Input} label={"Email"} />
        </div>
        <div style={{ margin: "1em 0" }}>
        <Field
        name={"lastName"}
        component={EmailInput}
        validator={emailValidator}
        label={"First Name"}
        />
        </div>
        <div style={{ margin: "2em 0" }}>
        <Field
        name={"email"}
        type={"email"}
        component={TextArea}
        label={"Email"}
        />
        </div>
        </fieldset>
        <div className="k-form-buttons">
        <button
        type={"submit"}
        className="k-button k-button-md k-rounded-md k-button-solid k-button-solid-base"
        disabled={!formRenderProps.allowSubmit}
        >
        Submit
        </button>
        </div>
    </FormElement>
    )}
    />
    );
};
export default App;
Вход в полноэкранный режим Выход из полноэкранного режима

На изображении ниже показана готовая копия демонстрационного проекта контактной формы.

Стоит отметить, что команда KendoReact разработала обширное руководство по проектированию форм, основанное на их многолетнем опыте создания компонентов пользовательского интерфейса. Руководство находится в свободном доступе на их сайте, и вы можете обратиться к нему, чтобы узнать больше о том, как создавать красивые формы и лучшие практики UX, даже если вы не используете саму форму KendoReact.

Заключение

В этом посте мы создали демонстрационный проект контактной формы React с помощью компонента React Form, предоставляемого библиотекой KendoReact. KendoReact Form можно использовать для создания любой формы, которую можно без труда интегрировать в любой существующий проект.

Оцените статью
Procodings.ru
Добавить комментарий