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 = require('flux');
Dispatcher = new Flux.Dispatcher();
Dispatcher.dispatch(action);
Dispatcher.register((action) => ...);
{
type: ActionTypes.DEPOSITED_INTO_ACCOUNT
data: {
accountID: 13,
amount: 500,
timestamp: 1433482935845
}
}
Важна семантика
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
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) {
switch (action.type) {
case DECREMENT:
return state – 1;
case INCREMENT:
return state + 1;
}
}
Store = {
[ActionTypes.TODO_ADDED](state, action) {},
[ActionTypes.TODO_REMOVED](state, action) {}
};
Flux Stateful — хорошие сторы
var Dispatcher = require('AppDispatcher');
exports.addItemInCard = function(item){
Dispatcher.dispatch({
type: ITEM_ADDED_IN_CARD,
data: item
});
};
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)
);
};
Ссылка на слайды — alexeyraspopov.github.io/talks/what-the-flux