Кратко о React

Алексей Плуталов, Злые марсиане

Кратко о React

Алексей Плуталов, Злые марсиане

martian.png

План

  1. Шаблонизация: вчера и сегодня
  2. React is…
  3. FLUX
  4. Вопросы
  5. Рекламная пауза

Часть 1 Шаблонизация:
вчера и сегодня

martian.png

Шаблонизация: вчера и сегодня Реалии прошлых дней

Шаблонизация: вчера и сегодня Решения прошлых дней

Шаблонизация: вчера и сегодня Пример ручной шаблонизации

$(function ($) {
  var notify = function (msg, type) {
    var html;

    html = "<div class='ntf ntf-" + type + "'>" + message + "</div>";

    $("body").append(html);
  };

  window.notify = notify;
})(jQuery);

Шаблонизация: вчера и сегодня Реалии недавнего прошлого

Шаблонизация: вчера и сегодня Решения недавнего прошлого

Шаблонизация: вчера и сегодня Пример строкового шаблона

<head>
  <title>
    {{ title }}
  </title>
</head>
function (title) {
  return "<head><title>" + title + "</title></head>";
}

Шаблонизация: вчера и сегодня Структура строкового шаблона

Шаблонизация: вчера и сегодня Особенности шаблона

Итог: неизвестность структуры и трансформаций конечного DOM

Шаблонизация: вчера и сегодня Создание фрагмента DOM

  1. генерация строки
  2. сборка DOM (innerHTML/innerSVG)
  3. пост‑обработка

Шаблонизация: вчера и сегодня Сборка DOM

  1. парсинг строки
  2. конструирование DOM
  3. вставка и ререндер страницы

Шаблонизация: вчера и сегодня Пост‑обработка

  1. получить ссылки на элементы
  2. привязка событий
  3. выполнение дополнительного обслуживающего кода

Как правило, этот этап является бутылочным горлышком.

Шаблонизация: вчера и сегодня Модификация фрагмента DOM

  1. генерация строки
  2. сборка DOM (innerHTML/innerSVG)
  3. пост‑обработка

Одни и те же медленные процессы.

Шаблонизация: вчера и сегодня Реалии настоящего дня

Шаблонизация: вчера и сегодня Решения настоящего дня

Шаблонизация: вчера и сегодня Пример DOM шаблона

/** @jsx React.DOM */
<h1 className="user-name">
  User:
  <span className="user-name__cnt">
    { userName }
  </span>
</h1>

Шаблонизация: вчера и сегодня Структура DOM шаблона

DOM узлы связываются в единое DOM-дерево.

Шаблонизация: вчера и сегодня Особенности DOM-шаблона

Итог: детерминированность структуры и трансформаций.

Шаблонизация: вчера и сегодня Создание и модификация

Создание фрагмента DOM:

Модификация производится путем DOM-операций.

Шаблонизация: вчера и сегодня Возможные оптимизации

Часть 2 React is…

martian.png

React is… Описание

Библиотека для разработки пользовательского интерфейса

React is… Основные концепции

React is… Компонент

React is… Пример компонента

/** @jsx React.DOM */

var Greeting = React.createClass({
  render: function () {
    return <div>Привет, { this.props.welcomed }!</div>;
  }
});

React.render(<Greeting welcomed="коллеги" />, document.body);

React is… JSXTransform

React is… Пример трансформации

<div>
  Привет, { this.props.welcomed }!
</div>
React.createElement(
  "div", null, "Привет, ",  this.props.welcomed, "!"
)

React is… Свойства (Properties)

React is… API свойств

React is… Состояние (State)

Данные влияющие на внешний вид компонента.

React is… Рекомендации

React is… API состояния

React is… Жизненный цикл

React is… Монтирование элемента

React is… Обновление элемента

React is… Размонтирование элемента

React is… Рендеринг

React is… Взаимодействие с браузером

var LoginForm = React.createClass({
  componentDidMount: function () {
    if (this.props.email.length === 0) {
      this.refs.email.getDOMNode().focus();
    } else {
      this.refs.password.getDOMNode().focus();
    }
  },
  render: function () {
    return (<form>
      <input type="text" ref="email" value={ this.props.email } />
      <input type="password" ref="password" value="" />
    </form>);
  }
});

React is… Пример обработки событий

var Clicker = React.createClass({
  getInitialState: function () {
    return { count: 0 };
  },
  handleClick: function (e) {
    e.preventDefault();
    this.setState({ count: this.state.count + 1 });
  },
  render: function () {
    return <button onClick={ this.handleClick }>{ this.state.count } />
  }
});

Вот и весь React

Часть 3 Flux

Flux Диаграмма взаимодействия

flux-diagram.png

Полезное

Вопросы

evilmartians.png

На правах рекламы

martian.png

Lightweight SVG icons for your web project