02-018
УДК 004.738.5
С79
Стефанов Стоян
С79 React.js. Быстрый старт. — СПб.: Питер, 2017. — 304 с.: ил. —
(Серия «Бестселлеры O’Reilly»).
ISBN 978-5-496-03003-8
Незаменимая вводная книга по технологии React для взыскательных JavaScript-
разработчиков. Все самое интересное о сверхпопулярном инструменте от компании
Facebook. В книге рассмотрены основные концепции высокопроизводительного про-
граммирования при помощи React, реальные примеры кода и доступные блок-схемы.
Прочитав ее, вы научитесь:
• Создавать и использовать собственные компоненты React наряду с универсальными
компонентами DOM.
• Писать компоненты для таблиц данных, позволяющие редактировать, сортировать
таблицу, выполнять в ней поиск и экспортировать ее содержимое.
• Использовать дополнительный синтаксис JSX в качестве альтернативы для вызовов
функций.
• Запускать низкоуровневый гибкий процесс сборки, который освободит вам время
и поможет сосредоточиться на работе с React.
• Работать с инструментами ESLint, Flow и Jest, позволяющими проверять и тести-
ровать код по мере разработки приложения.
• Обеспечивать коммуникацию между компонентами при помощи Flux.
Права на издание получены по соглашению с O’Reilly. Все права защищены. Никакая часть
данной книги не может быть воспроизведена в какой бы то ни было форме без письменного
разрешения владельцев авторских прав.
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
О чем эта книга. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Соглашения, используемые в книге . . . . . . . . . . . . . . . . . . . . . 17
Использование примеров кода. . . . . . . . . . . . . . . . . . . . . . . . . 18
Благодарности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Об авторе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
React.DOM.*. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Специальные DOM-атрибуты . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Расширение браузера React DevTools . . . . . . . . . . . . . . . . . . . . 33
Далее: настраиваемые компоненты . . . . . . . . . . . . . . . . . . . . . 33
JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
JavaScript: модернизированный код. . . . . . . . . . . . . . . . . . 150
Установка обязательных инструментальных средств. . . . . . . . 155
Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Browserify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Babel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
React и прочие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Займемся сборкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Транспиляция JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Создание пакета JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 159
Создание пакета CSS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Результаты!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Версия для Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Сборка в процессе разработки. . . . . . . . . . . . . . . . . . . . . . 161
Развертывание. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
Идем дальше. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Button.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Формы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Компонент <Suggest>. . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Компонент <Rating>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Компонент <FormInput>. . . . . . . . . . . . . . . . . . . . . . . . . . 188
Компонент <Form>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
Компонент <Actions> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Диалоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
Настройка приложения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
<Excel>: новый и усовершенствованный . . . . . . . . . . . . . . . . 204
Компонент <Whinepad>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Подведение итогов. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
Действия. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
CRUD-действия. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
Поиск и сортировка. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Использование действий в <Whinepad>. . . . . . . . . . . . . . . 286
Использование действий в компоненте <Excel>. . . . . . . . . 288
И еще немного о Flux. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
Библиотека immutable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Хранилище данных при использовании
библиотеки immutable . . . . . . . . . . . . . . . . . . . . . . . . . 294
Работа с данными при использовании
библиотеки immutable . . . . . . . . . . . . . . . . . . . . . . . . . 296
1 Hello
World
Установка
Для начала нужно получить копию библиотеки React. К счастью,
сделать это проще простого.
Перейдите по адресу http://reactjs.com (оттуда вас перенаправят на
официальную страницу GitHub), нажмите кнопку Download (За-
грузить), потом кнопку Download Starter Kit (Загрузить начальный
инструментарий) — и получите копию ZIP-файла. Распакуйте
и скопируйте каталог, содержащийся в загрузке, в то место, где
вы его легко сможете найти.
Например:
mkdir ~/reactbook
mv ~/Downloads/react-0.14.7/ ~/reactbook/react
22 Глава 1. Hello World
1
Вероятно, описанный автором процесс получения исходных файлов
для формирования показанной на рисунке структуры рабочего ка-
талога устарел и не может быть повторен. Реальнее всего получить
все указанные файлы, загрузив сопровождающий книгу полный пакет
инструментальных средств и примеров исходного кода с адреса https://
github.com/stoyan/reactbook/, нажав кнопку Clone or download. —
Примеч. пер.
Привет, мир React 23
<!DOCTYPE html>
<html>
<head>
<title>Hello React</title>
<meta charset="utf-8">
</head>
<body>
<div id="app">
<!-- здесь будет отображено мое приложение -->
</div>
<script src="react/build/react.js"></script>
<script src="react/build/react-dom.js"></script>
<script>
// код моего приложения
</script>
</body>
</html>
ReactDOM.render(
React.DOM.h1(null, "Hello World!"),
document.getElementById("app")
);
React.DOM.*
Как уже известно, React.DOM-объект предоставляет возможность
использования нескольких элементов HTML (на рис. 1.3 пока-
зано, как получить полный список, используя браузерную кон-
соль). Изучим этот API-интерфейс.
Специальные DOM-атрибуты
Вам должны быть известны специальные DOM-атрибуты, на-
пример class, for и style.
Вы не можете использовать class и for, поскольку в JavaScript
они являются зарезервированными словами. Вместо них нужно
выбрать названия className и htmlFor:
// Пример неработоспособного кода
React.DOM.h1(
{
class: "pretty",
for: "me",
},
"Hello World!"
);
React.DOM.h1(
{
className: "pretty",
htmlFor: "me",
},
"Hello World!"
);
Расширение браузера
React DevTools
Если открыть консоль браузера при попытке запуска некоторых
примеров из этой главы, вы увидите следующее сообщение:
Download the React DevTools for a better development experience: https://
fb.me/react-devtools, повествующее о том, что для повышения эф-
фективности разработки рекомендуется загрузить инструмен-
тарий React DevTools с сайта https://fb.me/react-devtools. Если
перейти по указанному URL-адресу, можно найти ссылки на
установку браузерного расширения, помогающего вести отладку
React-приложений (рис. 1.6).
Самый минимум
API-интерфейс для создания нового компонента имеет следу
ющий вид:
var MyComponent = React.createClass({
/* спецификации */
});