Интеграция Bootstrap с React позволяет разработчикам React использовать современную сеточную систему Bootstrap и ее различные другие компоненты.
В этом уроке мы собираемся:
- изучить инструменты и методы для создания пользовательского интерфейса с использованием Bootstrap для веб-приложения на основе React
- используйтеactstrap для создания приложения списка контактов React
React — одна из самых популярных технологий JavaScript для интерактивных веб-приложений. Его популярность проистекает из модульного подхода на основе компонентов, компоновки и быстрого алгоритма рендеринга.
Однако, будучи библиотекой представлений, React не имеет встроенного механизма, который мог бы помочь нам создавать проекты, которые бывают адаптивными, изящными и интуитивно понятными. Вот тут-то и вступает фреймворк дизайна, такой как Bootstrap .
Почему нельзя просто включить компоненты Bootstrap в React
Объединить Bootstrap с React не так просто, как добавить <link rel="stylesheet" />
в файл index.html
. Это потому, что Bootstrap зависит от jQuery для питания определенных компонентов пользовательского интерфейса. В jQuery используется метод прямого манипулирования DOM, который противоречит декларативному подходу React.
Если нам нужен Bootstrap только для адаптивной сетки из 12 столбцов или компонентов, которые не используют jQuery, мы можем просто прибегнуть к ванильной таблице стилей Bootstrap. Иначе, есть много библиотек, которые заботятся о преодолении разрыва между React и Bootstrap. Мы сравним оба метода, чтобы лучше подходить к конкретному случаю.
Давайте начнем!
Настройка таблицы стилей Bootstrap с помощью React
Давайте используем CLI Create React App для создания проекта React, который требует нулевой конфигурации для начала работы.
Мы устанавливаем приложение Create React и запускаем следующую команду, чтобы начать новый проект и обслуживать сборку разработки:
$ create-react-app react-and-bootstrap $ cd react-and-bootstrap $ npm start
Вот структура каталогов, созданная приложением Create React:
. ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ └── manifest.json ├── README.md ├── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ └── registerServiceWorker.js └── yarn.lock
Далее, давайте загрузим последнюю версию библиотеки Bootstrap с официального сайта Bootstrap . Пакет включает в себя как скомпилированные, так и минимизированные версии CSS и JavaScript. Мы просто скопируем CSS и поместим его в каталог public/
. Для проектов, которым нужна только сетка, есть также таблица стилей, специфичная для сетки.
Затем мы создаем новый каталог для css внутри public/
, вставляем bootstrap.min.css
в наш недавно созданный каталог css и связываем его с public/index.html
:
<head> <link rel="stylesheet" href="css/bootstrap.min.css"> </head>
В качестве альтернативы, мы можем использовать CDN для извлечения минимизированного CSS:
<link rel="stylesheet" href= "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
Давайте посмотрим, что работает, а что нет с этой настройкой.
Использование Vanilla Bootstrap с React
После добавления таблицы стилей Bootstrap в проект React мы можем использовать обычные классы Bootstrap внутри кода JSX. Давайте перейдем на демонстрационный сайт Bootstrap и скопируем некоторый случайный пример кода, просто чтобы убедиться, что все работает как надо:
Как мы видим, форма выглядит хорошо, а NavBar — нет. Это потому, что NavBar зависит от плагина jQuery Collapse , который мы не импортировали. Помимо невозможности переключения навигационных ссылок, мы не можем использовать некоторые функции, такие как выпадающие меню, закрываемые оповещения и модальные окна.
Разве не было бы замечательно, если бы мы могли импортировать Bootstrap в качестве компонентов React, чтобы максимально использовать возможности React? Например, представьте, можно ли использовать комбинацию компонентов Grid, Row и Column для организации страницы вместо надоедливых HTML-классов:
<!-- Bootstrap with HTML classes --> <div class="container"> <div class="row"> <div class="col-sm"> One of three columns </div> <div class="col-sm"> One of three columns </div> <div class="col-sm"> One of three columns </div> </div> </div> <!-- Bootstrap with React Components --> <Grid> <Row> <Col sm> One of three columns </Col> <Col sm> One of three columns </Col> <Col sm> One of three columns </Col> </Row> </Grid>
К счастью, нам не нужно реализовывать собственную библиотеку для этой цели, так как уже есть некоторые популярные решения. Давайте посмотрим на некоторые из них.
Обзор сторонних библиотек для React и Bootstrap
Существует несколько библиотек, которые пытаются создать реализацию Bootstrap для React, чтобы мы могли использовать компоненты JSX при работе со стилями Bootstrap. Я собрал список нескольких популярных модулей Bootstrap, которые мы можем использовать в наших проектах React.
React-Bootstrap — безусловно, одна из самых популярных библиотек для добавления компонентов Bootstrap в React. Однако на момент написания этого руководства оно предназначалось для Bootstrap v3, а не для последней версии Bootstrap. Он находится в активной разработке, и API может сломаться, когда выйдет более новая версия.
Reactionstrap — это еще одна библиотека, которая дает нам возможность использовать компоненты Bootstrap в React. В отличие от React-Bootstrap, responsestrap создан для последней версии Bootstrap. Модуль включает компоненты для типографики, значков, форм, кнопок, таблиц, сеток макетов и навигации. Он также находится в активной разработке и является хорошей альтернативой для создания приложений Bootstrap на основе React.
Есть несколько других библиотек, таких как React-UI , и специфичные для домена модули, такие как React-bootstrap-table и CoreUI-React Admin Panel на GitHub, которые предоставляют расширенную поддержку для создания потрясающих интерфейсов с использованием React.
Остальная часть этого урока будет посвящена реагирующему ремню, потому что это единственный популярный модуль, использующий последнюю версию Bootstrap.
Настройка библиотеки реагирующих полос
Начнем с установки библиотекиactstrap с помощью npm:
npm install --save reactstrap@next
Теперь мы можем импортировать соответствующие компоненты из модуля следующим образом:
import { Container, Row, Col} from 'reactstrap';
Тем не менее, библиотека не будет работать, как мы и ожидали. Как объяснено на веб-сайте responsestrap , причина в том, что responsestrap не включает Bootstrap CSS, поэтому нам нужно добавить его самостоятельно:
npm install --save bootstrap
Далее мы импортируем Bootstrap CSS в файл src/index.js
:
import 'bootstrap/dist/css/bootstrap.css';
Основы Bootstrap Grid
Bootstrap имеет гибкую, мобильную и гибкую систему сетки, которая позволяет использовать до 12 столбцов на страницу. Чтобы использовать сетку, нам нужно импортировать компоненты Container, Row и Col.
Контейнер принимает свойство fluid
которое преобразует макет фиксированной ширины в макет полной ширины. По сути, он добавляет соответствующий класс .container-fluid
Bootstrap в сетку.
Что касается <Col>
s, мы можем настроить их так, чтобы они принимали реквизиты, такие как xs
, md
, sm
и lg
, которые эквивалентны классам col- col-*
Bootstrap — например, <Col xs="6"> </Col>
Кроме того, мы можем передать объект в реквизит с дополнительными свойствами, такими как size
, order
и offset
. Свойство size
описывает количество столбцов, тогда как order
позволяет нам упорядочивать столбцы и принимает значение от 1 до 12. Свойство offset
перемещает столбцы вправо.
Приведенный ниже код демонстрирует некоторые функции Grid вactstrap:
Компоненты стиля начальной загрузки в React
Теперь, когда у нас под рукой имеется реакционная полоса, есть тонны компонентов Bootstrap 4, которые мы можем использовать с React. Охват их всех выходит за рамки данного руководства, но давайте попробуем несколько важных компонентов и используем их в реальном проекте — скажем, в приложении со списком контактов.
Панель навигации
activstrap Navbars являются адаптивными компонентами навигационной панели. Navbar может иметь подкомпоненты, такие как NavbarBrand, Nav, NavItem и т. Д. Для лучшей организации навигационных ссылок.
Чтобы сделать NavBar отзывчивым, мы можем включить <NavbarToggler>
внутри нашего компонента <Navbar>
а затем обернуть <NavItems>
в компонент <Collapse>
.
Посмотрите на приведенный ниже код, который показывает, как мы можем использовать компонент Navbar и состояние React для хранения данных переключения:
export default class Example extends React.Component { constructor(props) { super(props); this.toggle = this.toggle.bind(this); this.state = { isOpen: false }; } toggle() { this.setState({ isOpen: !this.state.isOpen }); } render() { return ( <div> <Navbar color="faded" light expand="md"> {/* Brandname */} <NavbarBrand href="/"> Demo </NavbarBrand> {/* Add toggler to auto-collapse */} <NavbarToggler onClick={this.toggle} /> <Collapse isOpen={this.state.isOpen} navbar> {/*Pull left */} <Nav className="ml-auto" navbar> <NavItem> <NavLink href="/link/"> Left Nav Link </NavLink> </NavItem> </Nav> {/* Pull right */} <Nav className="mr-auto" navbar> <UncontrolledDropdown nav inNavbar> <DropdownToggle nav caret> Bob </DropdownToggle> <DropdownMenu > <DropdownItem> Account </DropdownItem> <DropdownItem> Settings </DropdownItem> <DropdownItem divider /> <DropdownItem> Logout </DropdownItem> </DropdownMenu> </UncontrolledDropdown> </Nav> </Collapse> </Navbar> </div> ); } }
Модальное окно
Компонент Reactionstrap Modal создает Bootstrap Modal с заголовком, телом и нижним колонтитулом.
Модальный компонент принимает несколько подпорок и обратных вызовов, чтобы сделать окно интерактивным и закрываемым.
Свойство isOpen
определяет, будет ли модальный виден. Обратный вызов toggle
можно использовать для переключения значения isOpen
в управляющем компоненте.
Есть дополнительные реквизиты для добавления эффектов перехода. Доступные обратные вызовы включают onEnter
, onExit
, onOpened
и onClosed
:
{/*For the modal to open, this.state.show should become true which is usually triggered by an onClick event */} {/* toggleModal would set state of show to false onClose*/} <Modal isOpen={this.state.show} toggle={this.toggleModal} > <ModalHeader toggle={this.toggle}> Modal title </ModalHeader> <ModalBody> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. </ModalBody> <ModalFooter> <Button color="primary" onClick={this.toggle}>Do Something</Button>{' '} <Button color="secondary" onClick={this.toggle}>Cancel</Button> </ModalFooter> </Modal>
формы
Реактивная лента <Form>
может быть встроенной или горизонтальной .
Компонент Input
отображает элемент <input>
. Мы можем FormGroup
несколько компонентов Input
в FormGroup
для проверки состояния, правильного интервала и для доступа к другим функциям FormGroup.
Всегда полезно установить метку с помощью <Label>
. Формам гораздо больше, и вы должны проверить документацию Bootstrap на формах .
Вот код для нашей формы обратной связи:
<Form> <FormGroup row> <Label for="exampleEmail" sm={2}>Email</Label> <Col sm={10}> <Input type="email" name="email" id="exampleEmail" placeholder="with a placeholder" /> </Col> </FormGroup> <FormGroup row> <Label for="examplePassword" sm={2}>Password</Label> <Col sm={10}> <Input type="password" name="password" id="examplePassword" placeholder="password placeholder" /> </Col> </FormGroup> <FormGroup row> <Label for="exampleSelect" sm={2}>Select</Label> <Col sm={10}> <Input type="select" name="select" id="exampleSelect" /> </Col> </FormGroup> <FormGroup row> <Label for="exampleSelectMulti" sm={2}>Select Multiple</Label> <Col sm={10}> <Input type="select" name="selectMulti" id="exampleSelectMulti" multiple /> </Col> </FormGroup> <FormGroup row> <Label for="exampleText" sm={2}>Text Area</Label> <Col sm={10}> <Input type="textarea" name="text" id="exampleText" /> </Col> </FormGroup> </Form>
ListGroup
Реактивная полоса ListGroup упрощает стилизацию и управление элементами списка в React. ListGroup
оборачивает ListGroupItems
, которые можно сделать интерактивными с помощью обратного вызова onClick
.
Вот как выглядит код:
<ListGroup> <ListGroupItem>Item 1</ListGroupItem> <ListGroupItem>Item 2</ListGroupItem> <ListGroupItem>...</ListGroupItem> </ListGroup>;
Кнопки
Кнопки являются неотъемлемой частью любой дизайнерской основы. Для кнопок есть реактивный компонент <Button>
. Помимо active
и disabled
свойств, мы можем использовать color
и size
чтобы установить стиль кнопки (основной, успех и т. Д.) И размер (‘lg’, ‘sm’ и т. Д.):
{/*ButtonToolbar helps to organize buttons */} <div> <Button color="primary">primary</Button>{' '} <Button color="secondary">secondary</Button>{' '} <Button color="success">success</Button>{' '} <Button color="info">info</Button>{' '} <Button color="warning">warning</Button>{' '} <Button color="danger">danger</Button>{' '} <Button color="link">link</Button> </div>
Демонстрация: пользовательский интерфейс приложения списка контактов с реактивной лентой
Вот пример демонстрации, созданной с использованием компонентов, обсуждаемых в этом руководстве.
Проверьте это и поэкспериментируйте с ним, чтобы ознакомиться с реактивным ремнем:
Резюме
Теперь мы рассмотрели все, что вам нужно знать, чтобы использовать Bootstrap с React.
Нет недостатка в библиотеках для интеграции Bootstrap с React, и мы рассмотрели некоторые из самых популярных вариантов. Мы также исследовали популярную библиотеку под названиемactstrap. Если у вас возникли сомнения, не забудьте проверить страницу документации, чтобы узнать больше о доступных компонентах.
Итак, что вы думаете о создании адаптивных интерфейсов с использованием Bootstrap с React? Если у вас есть какие-либо предложения о Bootstrap в целом или конкретной библиотеке, которые вы считаете полезными, пожалуйста, не стесняйтесь делиться ими через комментарии.
Если у вас есть основы Bootstrap за поясом, но вы не знаете, как поднять свои навыки Bootstrap на следующий уровень, ознакомьтесь с нашим курсом «Создайте свой первый сайт с Bootstrap 4», чтобы быстро и весело познакомиться с мощью Bootstrap.