Implementing a Meta-Reducer in ngrx/store

Netanel Basal
Netanel Basal
Published in
2 min readMay 2, 2017

--

You don’t really need middleware

The ngrx team decided that we don’t need middleware anymore, in most cases, we can use meta-reducers to achieve the same effects.

What is a meta-reducer?

A meta-reducer is just a fancy name for higher order reducer (i.e., function).

Because a reducer is just a function, we can implement higher order reducer — “meta reducer.”

higher order function is a function that may receive a function as parameter or even return a function.

In simple words —

Take a reducer, do what you need and return a new reducer.

Create Logger Meta-Reducer

This is the basic signature of meta-reducer. The function expects to get a reducer function and needs to return a new reducer.

The logger reducer is just logging the current state, the action, and the next state then we returning the results of the current reducer function (combineReducers) without any modification.

Now let’s see how we can add the meta-reducer to our store.

First we need to pass the reducers to the combineReducers function. As you may know, the combineReducers will return a new reducer that will call every child reducer, and gathers their results into a single state object.

With the help of the compose function we can take the combineReducers result ( the new reducer ) and pass it to the logger meta-reducer.

Meta Reducers Flow

If we simplify the compose function we will get the following code:

Now let’s see another example. Reset the state when the user logs out.

Create Reset Meta-Reducer

We need to clear the store after the LOG_OUT action.

If the action type is LOG_OUT we will return an undefined state and therefore all of the reducers will return the initial value as they are supposed to.

Now we can add the reset meta-reducer to our store.

Follow me on Medium or Twitter to read more about Angular!

--

--

A FrontEnd Tech Lead, blogger, and open source maintainer. The founder of ngneat, husband and father.