99 líneas que lo simplifican todo( sin animar)

Post on 16-Apr-2017

74 Views

Category:

Software

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

function mapValues(obj, fn) { return Object.keys(obj).reduce((result, key) => {   result[key] = fn(obj[key], key);   return result; }, {});}

function pick(obj, fn) { return Object.keys(obj).reduce((result, key) => {   if (fn(obj[key])) {     result[key] = obj[key];   }   return result; }, {});}

function bindActionCreator(actionCreator, dispatch) { return (...args) => dispatch(actionCreator(...args));}

export function bindActionCreators(actionCreators, dispatch) { return typeof actionCreators === 'function' ?   bindActionCreator(actionCreators, dispatch) :   mapValues(actionCreators, actionCreator =>     bindActionCreator(actionCreator, dispatch)   );}

export function compose(...funcs) { return arg => funcs.reduceRight((composed, f) => f(composed), arg);}

export function applyMiddleware(...middlewares) { return (next) => (reducer, initialState) => {   var store = next(reducer, initialState);   var dispatch = store.dispatch;   var chain = [];

   chain = middlewares.map(middleware => middleware({     getState: store.getState,     dispatch: (action) => dispatch(action)   }));   dispatch = compose(...chain)(store.dispatch);

   return { ...store, dispatch }; };}

export function combineReducers(reducers) { var finalReducers = pick(reducers, (val) => typeof val === 'function'); return (state = {}, action) => mapValues(finalReducers,   (reducer, key) => reducer(state[key], action) );}

export function createStore(reducer, initialState) { var currentReducer = reducer; var currentState = initialState; var listeners = []; var isDispatching = false;

 function getState() {   return currentState; }

 function subscribe(listener) {   listeners.push(listener);

   return function unsubscribe() {     var index = listeners.indexOf(listener);     listeners.splice(index, 1);   }; }

 function dispatch(action) {   if (isDispatching) {     throw new Error('Reducers may not dispatch actions.');   }

   try {     isDispatching = true;     currentState = currentReducer(currentState, action);   } finally {     isDispatching = false;   }

   listeners.slice().forEach(listener => listener());   return action; }

 function  (nextReducer) {   currentReducer = nextReducer;   dispatch({ type: '@@redux/INIT' }); }

 dispatch({ type: '@@redux/INIT' });

 return { dispatch, subscribe, getState, replaceReducer };}

123456789

101112131415161718192021222324252627282930313233343536373839404142434445464748

495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899

top related