React js


Быстрый UI

без головной боли





Максим Кожух

plain javascript

REACT JS


Типичные проблемы

веб-приложений



  • производительность
  • сложный UI и логика
  • разработчики


MVC НАС СПАСЕТ !


Backbone

Angular

Ember

...


или нет...



REACT . JS


Model             View        Controller


  • простой синтакс
  • компоненты
  • реально быстрый
 

Синтакс


var HelloWorld = React.createClass({
  render: function(){
    return React.DOM.p("Hello world");
  }
});


React.renderComponent(
    HelloWorld(),
    document.getElementById('example')
);

Мы только что освоили 30% react.js

И зачем оно надо ?


return React.DOM.ul([
    React.DOM.li("Option A"),
    React.DOM.li("Option B")
])

    return "<ul><li>Option A</li><li>Option B</li></ul>";




VS





Виртуальный DOM
Звучит безумно - но так быстрее :)

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


Полный контроль над операциями с DOM

  • Применяет все изменения сразу
  • requestAnimationFrame
  • Негде воткнуть jQuery


При перерисовке 
React сравнивает старый vDOM и новый
применяет только изменения


Типичные проблемы

веб-приложений



  • производительность
  • сложный UI и логика

Компоненты


var HelloWorld = React.createClass({
  render: function(){
    return React.DOM.p( "Hello world " + this.props.index );
  }
});

var HelloUniverse = React.createClass({
  render: function() {
    var worlds = [];
    for(var i=0; i<100; i++) 
      worlds.push( HelloWord({ index: i }));

    return React.DOM.div(worlds);
  }
});
Уровень освоения react.js 50%

Пример

Пример

Компоненты


var HelloWorld = React.createClass({
  render: function(){
    return React.DOM.p( "Hello world " + this.props.index );
  }
});

var HelloUniverse = React.createClass({
  render: function() {
    var worlds = [];
    for(var i=0; i<100; i++) 
      worlds.push( HelloWord({ index: i }));

    return React.DOM.div(worlds);
  }
});

jxl


/** @jsx React.DOM */
var HelloWorld = React.createClass({
  render: function(){
    return <p>Hello world {this.prop.index}</p>;
  }
});

var HelloUniverse = React.createClass({
  render: function() {
    var worlds = [];
    for(var i=0; i<100; i++) 
      worlds.push( <HelloWorld index={i} />  );

    return <div>(worlds)</div>;
  }
});

JXL


2000
Javascript код в HTML


2014  
HTML теги в Javascript коде


Самый сложный пример


var HelloUniverse = React.createClass({
  getInitialState:function(){
    return { start: 0; } 
  },
  shiftNext:function(){
    this.setState({ start : this.state.start + 1 });
  },
  render: function() {
    var worlds = [];
    var start = this.start.state;

    for(var i=start; i<start + 10000; i++) 
      worlds.push( <HelloWorld index={i} onClick={this.onClick} />  );

    return <div onClick={this.shiftNext}>(worlds)</div>;
  }
});

Уровень освоения react.js 80%

Самый сложный пример - State


var HelloUniverse = React.createClass({
  getInitialState:function(){
    return { start: 0; } 
  },
  shiftNext:function(){
    this.setState({ start : this.state.start + 1 });
  },
  render: function() {
    var worlds = [];
    var start = this.start.state;


Самый сложный пример


  render: function() {
    var worlds = [];
    var start = this.start.state;

    for(var i=start; i<start + 10000; i++) 
      worlds.push( <HelloWorld index={i} onClick={this.onClick} />  );

    return <div onClick={this.shiftNext}>(worlds)</div>;
  }
});

Прочие чудеса



  • Автоматический event delegation  
  • Можно использовать с SVG, VML, Canvas
  • Можно использовать с NodeJS
  • Можно запускать в Web Worker
  • Поддается тестироваюнию



Типичные проблемы

веб-приложений



  • производительность
  • сложный UI и логика
  • разработчики ?

Кто использует

Khan Academy


Плюсы



  • Простой в освоении 
  • Простой в работе
  • Реально быстрый
  • Совместимость ( MVC)
  • Поддержка Facebook 

МИНУСЫ


  • совместимость  ( libs )
  • идеология
  • IE8+ only

REACT vs ANGUlAR





VS

 

 Angular

React

  • Простой
  • Компоненты
  • Только V
  • One-way binding
  • Быстрый
  • Сложный 
  • Директивы
  • Весь MVC
  • Two-way binding
  • Не очень

REACT VS ANGULAR


Vanilla JS все равно быстрее

Где кто ?





Ну собственно и всё



https://slides.com/mkozhukh/react

http://facebook.github.io/react/index.html