Redux DevTools instrumentation
npm install @redux-devtools/instrumentRedux enhancer used along with Redux DevTools or Remote Redux DevTools.
```
yarn add @redux-devtools/instrument
Add the store enhancer:
##### store/configureStore.js
`js
import { createStore, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import devTools from 'remote-redux-devtools';
import reducer from '../reducers';
// Usually you import the reducer from the monitor
// or apply with createDevTools as explained in Redux DevTools
const monitorReducer = (state = {}, action) => state;
export default function configureStore(initialState) {
const enhancer = compose(
applyMiddleware(...middlewares),
// other enhancers and applyMiddleware should be added before the instrumentation
instrument(monitorReducer, { maxAge: 50 }),
);
// Note: passing enhancer as last argument requires redux@>=3.1.0
return createStore(reducer, initialState, enhancer);
}
`
instrument(monitorReducer, [options])
- arguments
- monitorReducer _function_ called whenever an action is dispatched (see the example of a monitor reducer).
- options _object_
- maxAge _number_ or _function_(currentLiftedAction, previousLiftedState) - maximum allowed actions to be stored on the history tree, the oldest actions are removed once maxAge is reached. Can be generated dynamically with a function getting current action as argument.true
- shouldCatchErrors _boolean_ - if specified as , whenever there's an exception in reducers, the monitors will show the error message, and next actions will not be dispatched.false
- shouldRecordChanges _boolean_ - if specified as , it will not record the changes till pauseRecording(false) is dispatched. Default is true.pauseRecording(false)
- pauseActionType _string_ - if specified, whenever lifted action is dispatched and there are actions in the history log, will add this action type. If not specified, will commit when paused.true
- shouldStartLocked _boolean_ - if specified as , it will not allow any non-monitor actions to be dispatched till lockChanges(false) is dispatched. Default is false.false
- shouldHotReload _boolean_ - if set to , will not recompute the states on hot reloading (or on replacing the reducers). Default to true.true
- trace _boolean_ or _function_ - if set to , will include stack trace for every dispatched action. You can use a function (with action object as argument) which should return new Error().stack string, getting the stack outside of reducers. Default to false.trace
- traceLimit _number_ - maximum stack trace frames to be stored (in case option was provided as true). By default it's 10. If trace option is a function, traceLimit will have no effect, that should be handled there like so: trace: () => new Error().stack.split('\n').slice(0, limit+1).join('\n') (+1 is needed for Chrome where's an extra 1st frame for Error\n`).
MIT