Как создать компонент вкладок с помощью React
Введение
Если вы когда-либо создавали веб-приложение, есть большая вероятность, что в тот или иной момент вы создавали интерфейс документа с вкладками. Вкладки позволяют разбивать сложные интерфейсы на управляемые подразделы, между которыми пользователь может быстро переключаться. Вкладки являются распространенным компонентом пользовательского интерфейса и важны для понимания того, как их реализовать.
В этой статье вы узнаете, как создать многоразовый компонент-контейнер вкладок, который можно использовать отдельно или с вашими существующими компонентами.
Предпосылки
Прежде чем приступить к работе с этим руководством, вам потребуется следующее:
- Вам потребуется среда разработки с запуском How To Install Node.js в Ubuntu 18.04.
- В этом руководстве вы создадите приложения с помощью Как настроить проект React с помощью Create React App
- Вам также потребуются базовые знания JavaScript, которые вы можете найти в сети разработчиков Mozilla.
Это руководство было протестировано на Node.js версии 10.20.1 и npm версии 6.14.4.
Шаг 1 — Создание пустого проекта
На этом этапе вы создадите новый проект, используя приложение Create React. Затем вы удалите пример проекта и связанные с ним файлы, установленные при начальной загрузке проекта.
Для начала создайте новый проект. В терминале запустите следующий скрипт, чтобы установить новый проект с помощью create-react-app
:
- npx create-react-app react-tabs-component
После завершения проекта перейдите в каталог:
- cd react-tabs-component
В новой вкладке или окне терминала запустите проект с помощью сценария запуска Create React App. Браузер будет автоматически обновляться при изменениях, поэтому оставьте этот скрипт запущенным, пока вы работаете:
- npm start
Это запустит локально работающий сервер. Если проект не открылся в окне браузера, вы можете открыть его, посетив http://localhost:3000/
. Если вы запускаете это с удаленного сервера, адрес будет http://ваш_домен:3000
.
Ваш браузер загрузит шаблонное приложение React, включенное в состав Create React App:
Вы будете создавать совершенно новый набор пользовательских компонентов, поэтому вам нужно будет начать с очистки некоторого шаблонного кода, чтобы у вас был пустой проект.
Для начала откройте src/App.js
в текстовом редакторе. Это корневой компонент, который внедряется на страницу. Все компоненты будут начинаться отсюда. Дополнительную информацию о App.js
можно найти в статье Как настроить проект React с помощью Create React App.
Вы увидите такой файл:
import React from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
Удалите строку import logo from ./logo.svg;
. Затем замените все в операторе return
, чтобы он возвращал набор тегов div
и h1
. Это даст вам действительную страницу, которая возвращает h1
, которая отображает демонстрацию вкладок. Окончательный код будет выглядеть так:
import React from 'react';
import './App.css';
function App() {
return (
<div>
<h1>Tabs Demo</h1>
</div>
);
}
export default App;
Сохраните и выйдите из текстового редактора.
Наконец, удалите логотип. Вы не будете использовать его в своем приложении, и вам следует удалять неиспользуемые файлы во время работы. Это избавит вас от путаницы в долгосрочной перспективе.
В окне терминала введите следующую команду, чтобы удалить логотип:
- rm src/logo.svg
Теперь, когда проект настроен, вы можете создать свой первый компонент.
Шаг 2 — Создание компонента вкладок
На этом шаге вы создадите новую папку и компонент Вкладки
, который будет отображать каждую вкладку Вкладка
.
Сначала создайте папку в каталоге src
с именем components
:
- mkdir src/components
Внутри папки components
создайте новый файл с именем Tabs.js
:
- nano src/components/Tabs.js
Добавьте следующий код в новый файл Tabs.js
:
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import Tab from './Tab';
Это импорт, необходимый для создания этого компонента. Этот компонент будет отслеживать, какая вкладка активна, отображать список вкладок и содержимое активной вкладки.
Затем добавьте следующий код, который будет использоваться для отслеживания состояния и отображения активной вкладки под imports
в Tabs.js
:
...
class Tabs extends Component {
static propTypes = {
children: PropTypes.instanceOf(Array).isRequired,
}
constructor(props) {
super(props);
this.state = {
activeTab: this.props.children[0].props.label,
};
}
onClickTabItem = (tab) => {
this.setState({ activeTab: tab });
}
...
Начальное состояние добавляется для активной вкладки и начинается с 0
в массиве вкладок, которые вы будете создавать.
onClickTabItem
обновит состояние приложения до текущей вкладки, которую щелкнул пользователь.
Теперь вы можете добавить функцию рендеринга в тот же файл:
...
render() {
const {
onClickTabItem,
props: {
children,
},
state: {
activeTab,
}
} = this;
return (
<div className="tabs">
<ol className="tab-list">
{children.map((child) => {
const { label } = child.props;
return (
<Tab
activeTab={activeTab}
key={label}
label={label}
onClick={onClickTabItem}
/>
);
})}
</ol>
<div className="tab-content">
{children.map((child) => {
if (child.props.label !== activeTab) return undefined;
return child.props.children;
})}
</div>
</div>
);
}
}
export default Tabs;
Этот компонент отслеживает, какая вкладка активна, отображает список вкладок и содержимое активной вкладки.
Компонент Вкладки
использует следующий компонент, который вы создадите, под названием Вкладка
.
Шаг 3 — Создание компонента вкладки
На этом шаге вы создадите компонент Tab
, который будете использовать для создания отдельных вкладок.
Создайте новый файл с именем Tab.js
в папке components
:
- nano src/components/Tab.js
Добавьте следующий код в файл Tab.js
:
import React, { Component } from 'react';
import PropTypes from 'prop-types';
И снова вы импортируете React из react
и импортируете PropTypes
. PropTypes
– это специальное свойство propTypes
, используемое для проверки типов свойств в компоненте.
Затем добавьте следующий код под операторами import
:
...
class Tab extends Component {
static propTypes = {
activeTab: PropTypes.string.isRequired,
label: PropTypes.string.isRequired,
onClick: PropTypes.func.isRequired,
};
onClick = () => {
const { label, onClick } = this.props;
onClick(label);
}
render() {
const {
onClick,
props: {
activeTab,
label,
},
} = this;
let className = 'tab-list-item';
if (activeTab === label) {
className += ' tab-list-active';
}
return (
<li
className={className}
onClick={onClick}
>
{label}
</li>
);
}
}
export default Tab;
PropTypes
в этом компоненте используются для того, чтобы activeTab
и label
были строковыми и обязательными. onClick
также является обязательной функцией.
Компонент Tab
отображает имя вкладки и добавляет дополнительный класс, если вкладка активна. При нажатии компонент запускает обработчик onClick
, который сообщает компоненту Tabs
, какая вкладка должна быть активной.
Шаг 4 — Добавление CSS для стиля приложения
Помимо создания компонентов, вы добавите CSS, чтобы компоненты выглядели как вкладки.
Внутри файла App.css
удалите все CSS по умолчанию и добавьте следующий код:
[label react-tabs-component/src/App.css] .tab-list {
border-bottom: 1px solid #ccc;
padding-left: 0;
}
.tab-list-item {
display: inline-block;
list-style: none;
margin-bottom: -1px;
padding: 0.5rem 0.75rem;
}
.tab-list-active {
background-color: white;
border: solid #ccc;
border-width: 1px 1px 0 1px;
}
Вкладки будут выровнены, а вкладка active
получит рамку, чтобы она выделялась при нажатии.
Шаг 5 — Обновление App.js
Теперь, когда компоненты и связанные стили готовы, обновите компонент App
, чтобы использовать их.
Сначала обновите импорт, включив в него компонент Tabs
:
import React from 'react';
import Tabs from "./components/Tabs";
import "./App.css";
Затем обновите код в операторе return, чтобы включить импортированный компонент Tabs
:
...
function App() {
return (
<div>
<h1>Tabs Demo</h1>
<Tabs>
<div label="Gator">
See ya later, <em>Alligator</em>!
</div>
<div label="Croc">
After 'while, <em>Crocodile</em>!
</div>
<div label="Sarcosuchus">
Nothing to see here, this tab is <em>extinct</em>!
</div>
</Tabs>
</div>
);
}
export default App;
Элементы div
со связанными метками дают вкладкам их содержимое.
С добавлением Tabs
в компонент App
у вас теперь будет работающий интерфейс с вкладками, позволяющий переключаться между разделами:
Вы можете просмотреть этот репозиторий Github, чтобы увидеть завершенный код.
Заключение
В этом руководстве вы создали компонент вкладки, используя React для управления и обновления состояния вашего приложения.
Отсюда вы можете узнать о других способах стилизации компонентов React для создания еще более привлекательного пользовательского интерфейса.
Вы также можете просмотреть полную серию How To Code in React.js на DigitalOcean, чтобы узнать еще больше о разработке с помощью React.