@rest-hooks/use-enhanced-reducer

Add powerful orchestration to hooks-based Flux stores

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
@rest-hooks/use-enhanced-reducer
1,751101.2.89 days ago3 years agoMinified + gzip package size for @rest-hooks/use-enhanced-reducer in KB

Readme

useEnhancedReducer() - middlewares for React Hooks flux stores
CircleCI Coverage Status npm downloads bundle size npm version PRs Welcome
useEnhancedReducer() empowers building complex orchestration into flux stores built using React Hooks.

loggerMiddleware.ts

import { MiddlewareAPI, Dispatch } from '@rest-hooks/use-enhanced-reducer';

export default function loggerMiddleware<R extends React.Reducer<any, any>>({
  getState,
  dispatch,
}: MiddlewareAPI<R>) {
  return (next: Dispatch<R>) => async (action: React.ReducerAction<R>) => {
    console.group(action.type);
    console.log('before', getState());
    await next(action);
    console.log('after', getState());
    console.groupEnd();
  };
}

CacheProvider.tsx

import {
  useEnhancedReducer,
  Middleware,
} from '@rest-hooks/use-enhanced-reducer';

interface ProviderProps {
  children: ReactNode;
  middlewares: Middleware[];
  initialState: State<unknown>;
}

export default function CacheProvider({
  children,
  middlewares,
  initialState,
}: ProviderProps) {
  const [state, dispatch] = useEnhancedReducer(
    masterReducer,
    initialState,
    middlewares,
  );

  return (
    <DispatchContext.Provider value={dispatch}>
      <StateContext.Provider value={state}>{children}</StateContext.Provider>
    </DispatchContext.Provider>
  );
}

Middleware Examples