React Bootstrap — это одна из версий Bootstrap, созданная для React.
Это набор компонентов React со стилями Bootstrap.
В этой статье мы рассмотрим, как добавлять формы и группы ввода в приложение React с помощью React Bootstrap.
Библиотеки форм
Мы можем использовать библиотеки форм, чтобы упростить проверку формы.
React Bootstrap имеет интеграцию с библиотекой Formik, что позволяет нам привязывать наши входные значения к состояниям.
Он также выполняет проверку формы, когда используется с Yup.
Например, мы можем использовать его, написав:
import React from "react"; import Form from "react-bootstrap/Form"; import Col from "react-bootstrap/Col"; import Button from "react-bootstrap/Button"; import { Formik } from "formik"; import * as yup from "yup"; import "bootstrap/dist/css/bootstrap.min.css"; const schema = yup.object({ firstName: yup.string().required(), lastName: yup.string().required(), username: yup.string().required(), city: yup.string().required(), region: yup.string().required(), postalcode: yup.string().required(), terms: yup.bool().required() }); export default function App() { return ( <Formik validationSchema={schema} onSubmit={console.log} initialValues={{ firstName: "james", lastName: "smith" }} > {({ handleSubmit, handleChange, handleBlur, values, touched, isValid, errors }) => ( <Form noValidate onSubmit={handleSubmit}> <Form.Row> <Form.Group as={Col} md="6"> <Form.Label>First name</Form.Label> <Form.Control type="text" name="firstName" value={values.firstName} onChange={handleChange} isValid={touched.firstName && !errors.firstName} /> <Form.Control.Feedback>Looks good</Form.Control.Feedback> </Form.Group> <Form.Group as={Col} md="6"> <Form.Label>Last name</Form.Label> <Form.Control type="text" name="lastName" value={values.lastName} onChange={handleChange} isValid={touched.lastName && !errors.lastName} /> <Form.Control.Feedback>Looks good</Form.Control.Feedback> </Form.Group> </Form.Row> <Form.Row> <Form.Group as={Col} md="6"> <Form.Label>City</Form.Label> <Form.Control type="text" placeholder="City" name="city" value={values.city} onChange={handleChange} isInvalid={!!errors.city} /> <Form.Control.Feedback type="invalid"> {errors.city} </Form.Control.Feedback> </Form.Group> <Form.Group as={Col} md="3"> <Form.Label>State</Form.Label> <Form.Control type="text" placeholder="Region" name="region" value={values.region} onChange={handleChange} isInvalid={!!errors.region} /> <Form.Control.Feedback type="invalid"> {errors.region} </Form.Control.Feedback> </Form.Group> <Form.Group as={Col} md="3"> <Form.Label>Postal Code</Form.Label> <Form.Control type="text" placeholder="Postal Code" name="postalcode" value={values.postalcode} onChange={handleChange} isInvalid={!!errors.postalCode} /> <Form.Control.Feedback type="invalid"> {errors.zip} </Form.Control.Feedback> </Form.Group> </Form.Row> <Form.Group> <Form.Check required name="terms" label="Agree to terms" onChange={handleChange} isInvalid={!!errors.terms} feedback={errors.terms} /> </Form.Group> <Button type="submit">Submit</Button> </Form> )} </Formik> ); }
Мы создаем проверку формы с помощью Yup, прежде чем создавать компонент.
Все поля помечены как обязательные.
Затем в компоненте мы используем компонент Formik
для создания формы.
Мы устанавливаем начальные значения с помощью свойства initialValues
.
Требуется обратный вызов с объектом с различными свойствами, которые мы передаем нашим компонентам управления формой.
handleSubmit
передается в реквизит onSubmit
элемента формы.
handleChange
обновляет состояние из входных значений элементов управления формы, поэтому оно передается в свойство onChange
каждого элемента управления формы.
values
— это объект с введенными значениями, поэтому он передается как значение каждого элемента управления формы.
touched
указывает, взаимодействовал ли пользователь с формой или нет.
Мы можем использовать это, пока проверяем правильность контроля формы.
errors
— это объект с ошибками проверки формы, разделенными по полям.
Так что мы также можем использовать это в реквизите isValid
.
Когда у нас это есть, у нас есть форма с проверкой, и нам не нужно писать код, чтобы установить входные значения каждого поля в качестве значения состояния и проверить их самостоятельно.
Входная группа
Мы можем использовать компонент InputGroup
, чтобы добавить контент помимо поля ввода.
Например, мы можем написать:
import React from "react"; import FormControl from "react-bootstrap/FormControl"; import InputGroup from "react-bootstrap/InputGroup"; import "bootstrap/dist/css/bootstrap.min.css"; export default function App() { return ( <div> <InputGroup className="mb-3"> <InputGroup.Prepend> <InputGroup.Text>@</InputGroup.Text> </InputGroup.Prepend> <FormControl placeholder="Name" /> </InputGroup> </div> ); }
чтобы добавить InputGroup
со знаком @
слева от поля ввода.
InputGroup.Prepend
позволяет нам добавлять контент слева от ввода.
Мы также можем использовать InputGroup.Append
для добавления содержимого справа от ввода.
Например, мы можем написать:
import React from "react"; import FormControl from "react-bootstrap/FormControl"; import InputGroup from "react-bootstrap/InputGroup"; import "bootstrap/dist/css/bootstrap.min.css"; export default function App() { return ( <div> <InputGroup className="mb-3"> <FormControl placeholder="Name" /> <InputGroup.Append> <InputGroup.Text>@</InputGroup.Text> </InputGroup.Append> </InputGroup> </div> ); }
Размер входной группы
Мы можем изменить размер InputGroup
, используя реквизит size
.
Например, мы можем написать:
import React from "react"; import FormControl from "react-bootstrap/FormControl"; import InputGroup from "react-bootstrap/InputGroup"; import "bootstrap/dist/css/bootstrap.min.css"; export default function App() { return ( <div> <InputGroup size="sm"> <FormControl placeholder="Name" /> <InputGroup.Append> <InputGroup.Text>@</InputGroup.Text> </InputGroup.Append> </InputGroup> </div> ); }
чтобы сделать входную группу очень маленькой.
Мы также можем сделать размер очень большим, указав lg
в качестве значения.
Вывод
Проверка формы может быть упрощена благодаря интеграции Formik и Yup.
Группы ввода позволяют нам добавлять содержимое слева или справа от поля ввода.