React.js¶
Для создания пользовательского интерфейса мы используем библиотеку React.js, разработанную в facebook.
Особенности:
-
Декларативное описание интерфейса.
-
Перестроение интерфейса при каждом обновлении данных (это работает быстро из-за концепции shadow DOM и оптимизационных техник, типа shouldComponentUpdate и Immutable.js – подробнее в документации и интернете).
-
Приоритетным является односторонний поток данных (односторонние биндинги).
Рассмотрим пример:
class Content extends React.Component {
render() {
return (
<div className="dashboard">
<TessaTree treeData={this.props.treeData} selected={selectedView} />
<TessaView viewData={this.props.viewData} />
</div>
);
}
}
Здесь приведено определение компонента Content
.
Метод render
возвращает то, как должен выглядеть компонент.
Как видно, компонент состоит из div-элемента, а также из других компонентов: TessaTree
, TessaView
. При построении компоненты TessaTree
, TessaView
также будут опрошены через метод render, как они должны выглядеть. Таким образом создание новых компонент может быть разбито на части, со своими свойствами и отображением.
Компонент может получать данные и ссылки на функции через свойства. В этом случае свойства - это treeData
, selected
для компонента TessaTree
, и viewData
для TessaView
.
К переданным данным компонент может получить доступ через свойство props
. В этом случае компоненту Content
были переданы свойства viewData
и treeData
(за рамками примера). Компонент может работать с переданными данными как ему надо. В данном случае Content
передает полученные данные дальше, вниз по иерархии.
После опроса всех компонентов мы получаем метаструктуру описания html-страницы, которую react переводит в html-теги и разметку показывает пользователю.
Подробнее о работе React.js в документации.