What the Flux

Alexey Raspopov, DataRobot.

Powered by Shower

What the F***

What the Flux

Кто я?

О чем?

Все что нужно знать о UI

render = (Data) => UI;

Идеальный мир

				render = (Data) => UI;
				update = (State, Action) => NewState;
			
				Actions = [Update This, Add That, Delete Shit, ...];
				AppState = Actions.reduce(update, InitialState);
				AppState.subscribe(render);
			

Архитектура и дизайн

Flux — архитектура, работа с диспатчером — дизайн

Flux

Flux для вас

Основные идеи

StoreView

Stores

DispatcherStoreView

Dispatcher

Dispatcher

				Flux = require('flux');
				 
				Dispatcher = new Flux.Dispatcher();
			

Dispatcher API

				Dispatcher.dispatch(action);
				Dispatcher.register((action) => ...);
			

ActionDispatcherStoreView

Actions

Action payload

				{
				    type: ActionTypes.DEPOSITED_INTO_ACCOUNT
				    data: {
				        accountID: 13,
				        amount: 500,
				        timestamp: 1433482935845
				    }
				}
			

Action Types

Важна семантика

Константы

const TODO_CREATED = 'TODO_CREATED';

Плохие имена

				SHOW_LOAD_SPINNER
				OPEN_MODAL
				CREATE_TODO
				LOAD_USERS
				UPDATE_SOME_BULLSHIT
			

Хорошие имена

				TODO_CREATED
				DEPOSITED_INTO_ACCOUNT
				WITHDRAWAL_FAILED
				TOKEN_RECEIVED
				USER_INFO_UPDATED
			

Key Mirror

				ActionTypes = keyMirror({
				    TODO_CREATED: null,
				    LIST_REQUESTED: null
				});
			

Наивная реализация

				Dispatcher.register(function(action) {
				    switch (action.type) {
				    case TODO_ADDED:
				        // мутации
				        break;
				    case TODO_REMOVED:
				        // мутации
				        break;
				    }
				});
			

Чистая функция

				function CounterStore(state = 0, action) {
				
				}
			

Умная огранизация

				Store = {
				    [ActionTypes.TODO_ADDED](state, action) {},
				    [ActionTypes.TODO_REMOVED](state, action) {}
				};
			

Flux Stateful — хорошие сторы

Action Creators

Action Creators

				var Dispatcher = require('AppDispatcher');
				
				    Dispatcher.dispatch({
				        type: ITEM_ADDED_IN_CARD,
				
			

WebAPI

Async Action Creators

				exports.requestUserInfo = function(user){
				  dispatch(USER_INFO_LOADING_STARTED, user);
				  WebAPI.loadUserInfo(user).then(
				    (info) => dispatch(USER_INFO_LOADED, info),
				    (error) => dispatch(USER_INFO_LOADING_FAILED, error)
				
			

Имплементации

Что не так с современными JS-фреймворками

Популярные

Profits

Ссылки

Спасибо!

Ссылка на слайды — alexeyraspopov.github.io/talks/what-the-flux