Что это? Зачем это? Как это?
Николай Смирнов / @nickolaysm
Понимать принципов ReactJS
Желательно иметь опыт реализации
React? Что?! Бред какой-то, это не может работать. Даже пробовать не буду.
Эйфория!
Где я?
Все новое, на React. И это понятно.
Но уже переписываем то что и так хорошо работает!
Это ж ВИРУС!!!
Ищем ближайшего админа, забираем бубен!
Взываем к фейсбуку!!!
Что за зверь?! Вот бы библиотеку дать, так нет.
На! Получай паттерн.
«Ты ж пытливый ум, держи игрушку» @Фейсбук
(мне кажется, они так думают)
Бытует мнение, что Flux не самая простая идея.
Бред, конечно
Flux - это очень просто и эффективно
Нужно только слегка моск подкорректировать
По началу, что бы понять Flux каждый делал свою реализацию. Поэтому на github их не счесть. Сейчас, конечно в этом необходимость отпала. Много хороших реализаций и подробных статей.
Flux для глупых людей:
http://habrahabr.ru/post/249279/
Это не:
Это чистый разум - паттерн
Предложен фейсбуком
И лучше избегать сравнений
Помогает оставаться в рамках функциональных и реактивных идей.
Что в целом хорошо.
Так как все эти MVC и MVP в императивных языках – очень УБОГИ.
(ИМХО, ваще ИМХО, т.е. совсем ИМХО)
Все данные, а в случае реактивной парадигмы это означает, и события, и действия – распространяются в одном направлении
Только Action может общаться с внешним API.
Например: отправлять запросы на сервер.
Action содержит всю логику.
Только отсюда можно обращаться к внешним API.
Например: Добавить нового сотрудника, фильтровать список сотрудников…
Регистрирует все события о завершении Action.
Позволяет Store подписаться на них
Есть готовые реализации
Содержит модель данных.
Знает как применить результат от Action к модели.
Содержит метод отрисовки данных получаемых из Store.
Срабатывает на изменение Store.
import { Actions } from 'flummox';
class ActionEmployee extends Actions {
filter(filter){
return ... Можно вернуть значения или Promise
}
loadEmployee(id){
return ... Можно вернуть значения или Promise
}
saveEmployee(employee){
return ... Можно вернуть значения или Promise
}
}
import { Store } from 'flummox';
class StoreEmployee extends Store {
constructor(flux) {
super();
const actions = flux.getActions('action');
this.register(actions.filter, this.handleFilter);
this.state = { employees : [] };
}
handleFilter(message) {
console.log("handleFilter", message);
this.setState({
employees : message
});
}
}
import {Flux} from 'flummox';
import FluxComponent from 'flummox/component';
import ActionEmployee from "./Action.jsx";
import ApplicationStore from "./Store.jsx";
class ApplicationFlux extends Flux {
constructor() {
super();
this.createActions('action', ActionEmployee);
this.createStore('store', ApplicationStore, this);
}
}
import React from 'react';
import FluxComponent from 'flummox/component';
import flux from './app.jsx'
class ApplicationView extends React.Component {
render() {return (
<FluxComponent flux={flux} connectToStores={['store']}>
<ViewEmployeeCounter/>
</FluxComponent>
<FluxComponent flux={flux} connectToStores={['store']}>
<ViewEmployeesFilter/>
<ViewEmployees/>
</FluxComponent>
);}
}
import React from 'react';
var ViewEmployees = React.createClass({
load : function(){
this.props.flux.getActions('action').filter();
},
render: function() {
var emps = this.props.employees.map(function(item){
return(<div key={item.uuid}> {item.name} </div>)
});
return (
<div className="grid">
<div onClick={this.load}>Показать Сотрудников</div>
{emps}
</div>)
}
...
var ViewEmployeeCounter = React.createClass({
render: function() {
console.log("ViewEmployeeCounter");
return (
<span>{this.props.employees.length}</span>
);
}
})
var ViewEmployeesFilter = React.createClass({
keyPress: function(event) {
if(event.keyCode == 13)
this.props.flux.getActions('action')
.filter({text: event.target.value});
},
render: function() {
console.log("ViewEmployeesFilter");
return (
Фильтр:
<input type="text" onKeyUp={this.keyPress}/>
);
}...
Flux для глупых людей - http://habrahabr.ru/post/249279/
более чем достаточно
Разделяет:
Поскольку изначально архитектура заставляет разделить логику, данные и отрисовку:
Почему react и flux это хорошо?
Почему философии?
Сравнения всегда лукавы!
Да библиотеки вроде мощные, сделать можно все.
Но как будто кирпичи на стройке носишь, устаешь жутко.
Постоянное недовольство от процесса.
А под Web – двойное недовольствие.
Будто на самолет сел :)
Требование к технологии – увеличение производительности программиста желательно здесь и сейчас, а так же в среднесрочной и долгосрочной перспективе
Позволяет разделить
А значит берем джуниоров, говорим: делай раз, делай два, делай три
Проекты на react легко переводить. Бенефиты идут сразу. Можно разрабатывать как маленькие компоненты, так и целые сайты. Все ложится хорошо.
Просто с react реально прёт!