redux-guard
A middleware that turns Redux into a state machine, enforcing how your actions are sequenced.
Redux Guard protects future you from present you.
Example
Say you're signing in a user:
// Reducer const initialState = __currentState: 'UNAUTHENTICATED' message: 'Please sign in to continue.' { }
And you are dispatching the following actions in succession:
store // Great! Let's log you in.store // Okay, now you're logged out.store // Huh? Why you logging out again?
It doesn't make sense for a user to log out a second time after they are already logged out.
Redux Guard provides a means to protect against scenarios like this. You configure a set of constraints up front, and it enforces them... throwing an error if anything is amiss:
// Write your config for the redux-guard middleware.const config = guards: // Point to where you're tracking current status. state__currentState constraints: // If we're authenticated, we can only log out. 'AUTHENTICATED': 'LOG_OUT' // If we're unauthenticated, we can only log in. 'UNAUTHENTICATED': 'LOG_IN' // Apply the middleware, passing in the config.const store =
Because this middleware is designed to stop improperly dispatched actions before they make undesired changes to your app, it is recommended that you pass this to
applyMiddleware
first.
Now when you try dispatching the same actions, Guard will stop you:
store // ✅store // ✅store // 🚫 Throws an error.