SlideShare a Scribd company logo
1 of 40
Download to read offline
и методологии разработки
Алексей Ульянов
Lead Developer at Weblime
Знакомьтесь, React.
Это не очередной фреймворк
Знакомьтесь, React.
Но библиотека для создания
пользовательского интерфейса (UI).
Знакомьтесь, React.
Отдаёт ваш UI и реагирует на события.
Знакомьтесь, React.
Это "V" в MVC
Ре-рендер, не мутации
Создавайте компоненты,
а не шаблоны
Быстрый виртуальный DOM
React не имеет...
... контроллеров
... директив
... шаблонов
... глобальных слушателей событий
... моделей
Только
компоненты!
Но компоненты надо
как-то организовать
методология
FLUX
Для начала, надо понять
какую боль она решает
Цикличность ошибок
Представления обновляют модели.
Модели обновляют другие модели.
Flux решает эти проблемы.
Однонаправленный
поток данных
Однонаправленный поток данных
Action
- Передача данных в Dispetcher
- Запросы к API
Dispetcher
- Передача данных в Store
Store
- Информировать view (представления)
- Хранить состояние
View
- Получение данных
- Отображение данных
Как это выглядит
в реальной жизни
Отображение данных
Обработка пользовательских данных
Мы запустим поток данных через действие
пользователя.
Поток данных
Отображение данных
Обработка пользовательских данных
1. View (представление) говорит создателю
action (действия) выполнить его.
Поток данных
Отображение данных
Обработка пользовательских данных
2. Создатель action (действия) форматирует его и
отправляет dispetcher (диспетчеру).
Отображение данных
Обработка пользовательских данных
3. Dispetcher (диспетчер) отправляет действие 

store (хранилищам) последовательно.
Отображение данных
Обработка пользовательских данных
4. Как только состояние изменилось, store (хранилища)
дает об этом знать всем подписанным на него контроллерам.
5. Эти контроллеры затем запросят у store (хранилища)
обновленное состояние.
Отображение данных
Обработка пользовательских данных
6. После того как store (хранилище) отдает состояние,
контроллер передаст его дочерним view (представлениям)
запрос на повторное отображение согласно новому состоянию.
Звучит здорово?
Давайте взглянем на Redux
методология
REDUX
Какие проблемы решает
1. Код хранилищ не может быть перезагружен
без обнуления состояния
Какие проблемы решает
1. Код хранилищ не может быть перезагружен
без обнуления состояния

РЕШЕНИЕ
Просто разделите эти две функции.
Какие проблемы решает
2. Состояние перезаписывается
при каждом действии
Какие проблемы решает
2. Состояние перезаписывается
при каждом действии

РЕШЕНИЕ
Скопируйте состояния и примените
изменения к копии.
Какие проблемы решает
3. Нет правильных “мест” для сторонних плагинов
Какие проблемы решает
3. Нет правильных “мест” для сторонних плагинов

РЕШЕНИЕ
Сделать легким “оборачивание” частей системы в
другие объекты.
Редьюсеры (The reducers)
Отображение данных, обработка пользовательских данных.
Когда хранилище хочет узнать, как действие изменяет
состояние, оно спрашивает reducer (редьюсеры).
Отображение данных
Обработка пользовательских данных
Как это работает
1. Подготовить хранилище. Корневой компонент
создаёт хранилище, говоря ему, какой корневой
редьюсер использовать
Отображение данных
Обработка пользовательских данных
Как это работает
2. Установить связь между хранилищем
и компонентами.
Как это работает
3. Подготовить обратные вызовы для действий.
Отображение данных
Обработка пользовательских данных
Что ещё?
• Простота и предсказуемость
• Мало магии
• Линейное масштабирование
• Малое количество абстракций
• Boilerplate
CONTACT ME
al.ulianov@gmail.com
vk.com/al.ulianov
facebook.com/ulianovalexey
Вопросы?

More Related Content

What's hot

«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис РечкуновDevDay
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийrit2010
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)Ontico
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис РечкуновJSib
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CYandex
 
Быстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantБыстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantOlga Lavrentieva
 
Артём Кошелев: Прочная основа для автоматизации тестирования
Артём Кошелев: Прочная основа для автоматизации тестированияАртём Кошелев: Прочная основа для автоматизации тестирования
Артём Кошелев: Прочная основа для автоматизации тестированияYandex
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеYandex
 
Async Javascript
Async JavascriptAsync Javascript
Async JavascriptGetDev.NET
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Ontico
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновЖивая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновOpenVZ
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургAlexey Ivanov
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 

What's hot (20)

«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
 
Ilia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решенийIlia kantor паттерны серверных comet решений
Ilia kantor паттерны серверных comet решений
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
55+1 прием для улучшения Javascript-кода / Татьяна Бабич (Simbirsoft)
 
Service workers
Service workersService workers
Service workers
 
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
#11 "Отзывчивый UI без блокировки Event Loop" Денис Речкунов
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
Быстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c VagrantБыстрое развертывание среды разработки c Vagrant
Быстрое развертывание среды разработки c Vagrant
 
Артём Кошелев: Прочная основа для автоматизации тестирования
Артём Кошелев: Прочная основа для автоматизации тестированияАртём Кошелев: Прочная основа для автоматизации тестирования
Артём Кошелев: Прочная основа для автоматизации тестирования
 
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртываниеВладимир Кузнецов — Прототип сайта: разработка и развёртывание
Владимир Кузнецов — Прототип сайта: разработка и развёртывание
 
Async Javascript
Async JavascriptAsync Javascript
Async Javascript
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел ЕмельяновЖивая миграция: плюсы, минусы и подводные камни - Павел Емельянов
Живая миграция: плюсы, минусы и подводные камни - Павел Емельянов
 
ДАМП 2015 Екатеринбург
ДАМП 2015 ЕкатеринбургДАМП 2015 Екатеринбург
ДАМП 2015 Екатеринбург
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
JSP
JSPJSP
JSP
 

Similar to FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём

чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5student_kai
 
Архитектуре проектов на примере интеграции TourIndex, TourDealer
Архитектуре проектов на примере интеграции TourIndex, TourDealerАрхитектуре проектов на примере интеграции TourIndex, TourDealer
Архитектуре проектов на примере интеграции TourIndex, TourDealerVitaly Belenky
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxADN Digital Studio
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Sergiy Shychynov
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...GoSharp
 
дерюшкин Agile vector
дерюшкин   Agile vectorдерюшкин   Agile vector
дерюшкин Agile vectorMagneta AI
 
Agile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAgile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAlexey Deryushkin
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsMax Klymyshyn
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
 
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"GeeksLab Odessa
 
Оптимизация react+redux приложений | Odessa Frontend Meetup #7
Оптимизация react+redux приложений | Odessa Frontend Meetup #7Оптимизация react+redux приложений | Odessa Frontend Meetup #7
Оптимизация react+redux приложений | Odessa Frontend Meetup #7OdessaFrontend
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, ЯндексYandex
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОYandex
 

Similar to FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём (20)

чмв лекция №5
чмв   лекция №5чмв   лекция №5
чмв лекция №5
 
Архитектуре проектов на примере интеграции TourIndex, TourDealer
Архитектуре проектов на примере интеграции TourIndex, TourDealerАрхитектуре проектов на примере интеграции TourIndex, TourDealer
Архитектуре проектов на примере интеграции TourIndex, TourDealer
 
Adn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и ReduxAdn@it'summer - Изоморфные приложения с React и Redux
Adn@it'summer - Изоморфные приложения с React и Redux
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
CQRS innovations
CQRS innovationsCQRS innovations
CQRS innovations
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4Enterprise flex pure mvc.v4
Enterprise flex pure mvc.v4
 
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
Как перейти с двухзвенной архитектуры Desktop приложения на трехзвенную за од...
 
дерюшкин Agile vector
дерюшкин   Agile vectorдерюшкин   Agile vector
дерюшкин Agile vector
 
Agile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в РайффайзенбанкеAgile Vector - внедрение agile разработки в Райффайзенбанке
Agile Vector - внедрение agile разработки в Райффайзенбанке
 
Управление данными (дополнительно)
Управление данными (дополнительно)Управление данными (дополнительно)
Управление данными (дополнительно)
 
LvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.jsLvivJS 2014 - Win-win c React.js
LvivJS 2014 - Win-win c React.js
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
 
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
WebCamp:Front-end Developers Day. Артем Тритяк "React.js LiveCoding session"
 
Оптимизация react+redux приложений | Odessa Frontend Meetup #7
Оптимизация react+redux приложений | Odessa Frontend Meetup #7Оптимизация react+redux приложений | Odessa Frontend Meetup #7
Оптимизация react+redux приложений | Odessa Frontend Meetup #7
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
drools introduction
drools introductiondrools introduction
drools introduction
 
Тимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПОТимур Лукин - Архитектура и проектирование ПО
Тимур Лукин - Архитектура и проектирование ПО
 

FrontDays #1. Алексей Ульянов, React.js и методологии разработки на нём