42
Боль и радость создания изоморфных приложений на ReactJS Viktor Turskyi Kharkiv JS 2015

Kharkiv JS 2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Embed Size (px)

Citation preview

Page 1: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Боль и радость создания изоморфных

приложений на ReactJSViktor Turskyi

Kharkiv JS 2015

Page 2: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Изоморфизм o_O

В общих чертах его можно описать так: пусть даны две алгебраические структуры (группы, кольца, линейные пространства и т. п.). Обратимое отображение (биекция) между ними называется изоморфизмом, если оно сохраняет эту структуру.

(Wikipedia)

Page 3: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Изоморфное приложение?

Одностраничное приложение, которое можно запустить и на сервере

Page 4: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Демо

wall.itsquiz.com

Page 5: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Клиент

Сервер

Общий код REST API

Page 6: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

RESTAPI

Общий код

Page 7: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

RESTAPI

View

Routing

Fetching I18N

Models

Page 8: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Зачем это надо? (о радостях)

Поисковая оптимизация

Скорость

Page 9: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Оттенки изоморфности

1) Изоморфный View2) Изоморфные стили3) Изоморфный роутинг4) Изоморфная работа с REST API (fetching)5) Изоморфная конфигурация 6) Изоморфный ES67) Изоморфная локализация

Page 10: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Радость первая - React

Page 11: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

View - клиент

Page 12: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

View - сервер

Page 13: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Боль первая - не работает import стилей в nodejs

Page 14: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Решение - inline styles (стили - просто javascript)

Page 15: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Проблемы с inlines styles

1) псевдо-атрибуты :hover, :active, :focus2) media queries3) автопрефиксинг4) объединение стилей

Page 16: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)
Page 17: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Сервер и клиент генерируют разную разметку

Page 18: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Боль вторая - клиентский автопрефиксер

Page 19: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Решение, которое работает (в этот раз работает)

Page 20: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Подключаем библиотеку компонентов

Page 21: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Боль третья - в “Material UI” тоже клиентский автопрефиксер

Page 22: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Мы переключились на Material Design Lite

react-mdl (Material Design Lite) работает!!! )

Что делать?

Page 23: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Ура проблему со стилями мы решили!!!

Page 24: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Х..р там!!!

Page 25: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Боль четвертая - порядок загрузки

Page 26: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Как правильно?

CSS загружать в начале

Javascript загружать в конце

Page 27: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Правильный порядок загрузки

Page 28: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Решение - Text Extract Plugin для Webpack

Page 29: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Радость вторая - React Router

Page 30: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Роутинг (общий код)

Page 31: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Роутинг (клиент)

Page 32: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Роутинг (сервер)

Page 33: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Радость третья - Redux

Page 34: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Один store на приложение

Page 35: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Работа с REST API

Page 36: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Порядок загрузки

Клиент:

1. Рендеринг React компонента2. Отображение спиннера3. Загрузка данных4. Обновления страницы (повторный рендеринг React компонента)

Сервер:

1. Загрузка всех необходимых данных2. Рендеринг страницы сразу с данными3. Отдача HTML на клиент

Page 37: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

REST API - общий код (isomorphic-fetch)

Page 38: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Что осталось за пределами доклада

1) Изоморфная конфигурация 2) Изоморфная локализация3) Изоморфный ES6

Page 39: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Статистика

Универсальный код - 1778 SLOC (93%)

Коде специфический для клиента - 33 SLOC (2%)

Коде специфический для сервера - 95 SLOC (5%)

Page 40: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Ссылки

Redux http://rackt.org/redux/index.html

React Router https://github.com/rackt/react-router

Tutorial: Handcrafting an Isomorphic Redux Application (With Love)

https://medium.com/@bananaoomarang/handcrafting-an-isomorphic-redux-application-with-love-40ada4468af4

Page 41: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Исходники приложения

https://github.com/WebbyLab/itsquiz-wall/

Page 42: Kharkiv JS  2015: Боль и радость создания изоморфных приложений на ReactJS (RU)

Viktor Turskyi (koorchik)

[email protected]://twitter.com/koorchik

https://github.com/koorchik

http://webbylab.com