Почему вы должны попробовать React
Привет!
За последнее время в фронтенд мире произошло грандиозное событие: facebook представил шаблонизатор. Казалось бы, чего в этом такого, еще один шаблонизатор. Но я лукавлю, называя React просто шаблонизатором. На самом деле это полноценный, независимый фреймворк, для рендринга html и реакции на пользовательские события в браузере.
На мой взгляд, самое главное, что предлагает нам React - это компоненты и компонентный подход. Вы скажите, что такой
подход можно использовать и, на пример, с angular. И будете правы. Однако вспомним SVN и git. Помимо централизованности
у SVN был фатальный недостаток: работа с ветками. Создание, слияние, все это было примерно аналогично созданию
директив в angular. Так как git позволят работать с ветками быстро и удобно, это активно используется, так и React
позволяет быстро и просто создать компонент.
Просто сравните:
const React = require('react');
const HelloWorld = React.createClass({
propTypes: {
name: React.PropTypes.string.isRequired
},
handleClick() {
console.log('click!');
},
render() {
return (
<p onClick={this.handleClick}>Hello, {this.props.name}</p>
);
}
});
module.exports = HelloWorld;
const angular = require('angular');
function HelloWorldDirective() {
return {
restrict: 'EA',
scope: {
name: '&'
},
template: '<p ng-click="handleClick()">Hello, <span ng-bind="name"></span></p>',
link($scope) {
$scope.handleClick = () => {
console.log('click!')
};
}
};
};
const MODULE_NAME = 'nkt.hello-world';
angular.module(MODULE_NAME, [])
.directive('nktHelloWorld', HelloWorldDirective);
module.exports = MODULE_NAME;
Даже для такого маленького примера код anuglar содержит кучу ненужного DSL, который необходимо помнить и за который
приходится платить в runtime. В React же красивый, понятный, немного расширенный (JSX), старый добрый, javascript.
Нужен цикл - пожалуйста, for
, for-in
, for-of
, .forEach
, .map
, и тд. Я пол года писал проект на angular и
ни разу не смог сходу вспомнить правильно, что писать в ng-options
.
Помимо этого React использует (теперь уже модный и популярный) virtual DOM, что позволяет не задумываться о производительности. Есть система для проверки типов в dev-режиме, помогающая избежать кучи глупых ошибок и писать чистый, самодокументируемый код.
Однако у React есть свои проблемы. К ним бы я отнес отсутствие качественных примеров взаимодействия с внешними источниками данных. Facebook предложил архитектурный паттерн flux, по которому создали 20+ фреймворков, однако примеров от этого сильно не прибавилось. Если вас заинтересует эта тема, советую взглянуть на alt, на мой взгляд это наиболее понятная и простая реализация flux на данный момент.