+ -
Notes for current slide
Notes for next slide

React

успешный синтез теории и практики

Alexander Solovyov, How Far Games

UA Web Challenge, Nov 2013

В начале было СловоMVC

И MVC было у Backbone

И MVC был Backbone

2 / 21

В начале было СловоMVC

И MVC было у Backbone

И MVC был Backbone


Но было ли это хорошо?

3 / 21

Разделение интересов

  • Уменьшить связанность (coupling, зв’язність)
  • Увеличить связность (cohesion, пов’язаність)
4 / 21

Связанность

Степень, в которой каждый программный модуль полагается на другие модули.

5 / 21

Связность

Характеристика внутренней взаимосвязи между частями одного модуля.

6 / 21

А что обычно?

  • Все разделено
    • На шаблоны
    • И логику интерфейса
  • Связанность - высокая
  • И связность - тоже!
7 / 21

Backbone

Backbone.View.extend({
tagName: 'li',
events: {
'click .icon': 'open'
}
});
8 / 21

Angular

<ul>
<li ng-repeat="todo in todos">
{{todo.text}}
</li>
</ul>
9 / 21

MVC в JS прямо сейчас

  • Разделение по технологиям, а не интересам
  • Пытается решить, где твои интересы, за тебя
10 / 21

FRP?

  • Опиши отношения данных
  • Расскажи, как построить UI на их основе
  • Вуаля
11 / 21

React

react

12 / 21

Компоненты

var Root = React.createClass({
render: function() {
return <div>{this.props.text}</div>;
}
});
React.renderComponent(
<Root text="hello">,
document.body);
13 / 21

JSX

<div attr="value">
<span>one</span>
<span>two</span>
</div>
DOM.div({attr: "value"},
DOM.span(null, "one"),
DOM.span(null, "two")
);
14 / 21

Как это работает

  • Иерархия компонентов
  • Односторонняя привязка данных
  • Виртуальный DOM
15 / 21

Иерархия компонентов

Item = React.createClass({
render: function() {
<li>{this.props.text}</li>;
}});
List = React.createClass({
render: function() {
<ul>{this.props.list.map(function(x) {
return <Item text={x}/>;
})}</ul>
}});
16 / 21

Привязка данных

  • render вызывается на каждом изменении данных, как на сервере
  • Никаких магических биндингов
  • Никаких проверок на "грязность"
  • Всë декларативно
17 / 21

Виртуальный DOM

  • На каждое изменение обновляет граф объектов
  • Применяет минимальные изменения к DOM'у
  • Быстро
18 / 21

Результат

  • Быстро
  • Удобно
  • Просто
19 / 21

Еще плюсы

  • Можно рисовать на сервере (react-page)
  • Можно рисовать в воркере (экспериментальное)
  • Удобно использовать из ClojureScript (pump)
20 / 21

Спасибо за внимание!

Не забудьте заценить http://reactjs.org/

21 / 21

В начале было СловоMVC

И MVC было у Backbone

И MVC был Backbone

2 / 21
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
s Start & Stop the presentation timer
t Reset the presentation timer
?, h Toggle this help
Esc Back to slideshow