32
React.js Backbone и FLUX Артем Тритяк

Артем Тритяк, Lead Front-End developer в Electric Cloud

Embed Size (px)

Citation preview

Page 1: Артем Тритяк, Lead Front-End developer в Electric Cloud

React.jsBackbone и FLUX

Артем Тритяк

Page 2: Артем Тритяк, Lead Front-End developer в Electric Cloud

• Построение сложного UI без боли

• Все просто - перерисовка всей страницы на любое изменение

• React.js сделает diff и внесет только изменения в DOM

Реакт? Что такое Реакт? Зачем Реакт?

Page 3: Артем Тритяк, Lead Front-End developer в Electric Cloud

JSX, Virtual DOM

Page 4: Артем Тритяк, Lead Front-End developer в Electric Cloud
Page 5: Артем Тритяк, Lead Front-End developer в Electric Cloud

Композиция элементов

Page 6: Артем Тритяк, Lead Front-End developer в Electric Cloud

Вложенные элементы

Page 7: Артем Тритяк, Lead Front-End developer в Electric Cloud

Вложенные элементы

Page 8: Артем Тритяк, Lead Front-End developer в Electric Cloud

Вложенные элементы

this.props.children

Page 9: Артем Тритяк, Lead Front-End developer в Electric Cloud

JSX -> JS compilerReact Rails

PyReact, Django React

Grunt.js React, Gulp.js React, React Tools

Page 10: Артем Тритяк, Lead Front-End developer в Electric Cloud

• SEO - не нужен phantom.js renderer для SPA

• Ускорение первой загрузки

• Подхватывание JS-bindings «на лету»

Server Side Rendering

Page 11: Артем Тритяк, Lead Front-End developer в Electric Cloud

Server Side Rendering: Node.js

Page 12: Артем Тритяк, Lead Front-End developer в Electric Cloud

Server Side Rendering: Node.js

https://github.com/artyomtrityak/react-server-render-node

Page 13: Артем Тритяк, Lead Front-End developer в Electric Cloud
Page 14: Артем Тритяк, Lead Front-End developer в Electric Cloud

Flux

Page 15: Артем Тритяк, Lead Front-End developer в Electric Cloud

Flux: one directional data flow

Page 16: Артем Тритяк, Lead Front-End developer в Electric Cloud

Сервер

Model.fetch

Model.destroy

Model.saveCollection.fetch

Model.parse

Page 17: Артем Тритяк, Lead Front-End developer в Electric Cloud

onClick onSelect

onChange …

Actions.actionName(params)8!

UserActions.createUser(…) UserActions.selectGroup(…) 1

2

3

Flux: Кто главный? React главный

Page 18: Артем Тритяк, Lead Front-End developer в Electric Cloud

1

2

3

4

Page 19: Артем Тритяк, Lead Front-End developer в Electric Cloud

Flux: Action -> WebUtils -> Dispatcher

12

3

Page 20: Артем Тритяк, Lead Front-End developer в Electric Cloud

Model

Model Eventschange

change:fieldName invalid

1

2

3

Page 21: Артем Тритяк, Lead Front-End developer в Electric Cloud

Flux: examples

https://github.com/facebook/flux/tree/master/examples

https://github.com/gaearon/flux-react-router-example

Page 22: Артем Тритяк, Lead Front-End developer в Electric Cloud

+Bonus

React Native

Page 23: Артем Тритяк, Lead Front-End developer в Electric Cloud

Facebook groups app

Page 24: Артем Тритяк, Lead Front-End developer в Electric Cloud

• JavaScript

• НЕ WebView

• НЕ браузер

• JavaScript логика в отдельном потоке, не блокирует Native UI

• JSX HTML -> Native platform elements

• Learn once, write everywhere

• Example: http://www.facebookgroups.com/

React Native

Page 25: Артем Тритяк, Lead Front-End developer в Electric Cloud

CSSBEM, MCSS…

!

SASS, Akella SASS :) LESS, STYLUS…

!

Пре-процессоры Пост-процессоры

Приоритет: #id .class <div> inline

Page 26: Артем Тритяк, Lead Front-End developer в Electric Cloud
Page 27: Артем Тритяк, Lead Front-End developer в Electric Cloud

Глобальный namespace использовать плохо, да?

Page 28: Артем Тритяк, Lead Front-End developer в Electric Cloud

CSS

Page 29: Артем Тритяк, Lead Front-End developer в Electric Cloud

Inline CSS, CSS in JS

Page 30: Артем Тритяк, Lead Front-End developer в Electric Cloud

• Все знают JavaScript

• Функции

• Переменные

• Scopes

• Минификация

• Наследование

Преимущества

Page 31: Артем Тритяк, Lead Front-End developer в Electric Cloud

Но это же…

Page 32: Артем Тритяк, Lead Front-End developer в Electric Cloud