- Intercept actions before they are reduced
- Intercept state before it is emitted
- Can change the control flow of the Store

Most common use cases
- Reset state when a signout action occurs
- for debugging creating logger
- to rehydrate when the application starts up
-It is like a plugin system for the store, they behave similarly to the interceptors
Example
An example of this can be to use it in a logger
const logger = (reducer: ActionReducer<any, any>) => (state: any, action: Action) => {
console.log('Previous State', state)
console.log('Action', action)
const nextState = reducer(state, action)
console.log('Next State', nextState)
return nextState
}
export const metaReducers: MetaReducer<State>[] = [logger]