Anatomy

The structure of a Lore application

config/redux.js

This file is connected to the lore-hook-redux hook and overrides the default redux behaviors.

You can learn more about the configuration options here.

Default Config

The default config is shown below.

/**
 * Configuration file for Redux
 *
 * This file is where you define overrides for the default Redux behavior.
 */

// import { compose, applyMiddleware, combineReducers, createStore } from 'redux';
// import { thunk } from 'redux-thunk';
// import { batchedSubscribe } from 'redux-batched-subscribe';
// import _ from 'lodash';

export default {

  /**
   * Middleware injected into the dispatch flow, placed at the point between
   * dispatching an action, and the moment it reaches the reducer.
   *
   * http://redux.js.org/docs/advanced/Middleware.html
   */

  // middleware: [thunk],

  /**
   * Length of time (in milliseconds) that needs to exist between updates
   * to the Redux store before React is notified the store has changed.
   * A value of zero corresponds to "one tick".
   *
   * https://lodash.com/docs/4.17.4#debounce
   */

  // debounceWait: 0,

  /**
   * Enhance the store with third-party capabilities such as middleware,
   * time travel, persistence, etc.
   *
   * http://redux.js.org/docs/api/compose.html
   *
   * Note about the batchedSubscribe enhancer:
   *
   * When normalization is configured and enabled, action creators can end up
   * firing multiple actions back-to-back. By default, these actions do not
   * get batched by Redux (it notifies React that the store changed after every
   * action), which means every action will cause React to re-render the application.
   * When this occurs back-to-back over a very short period of time, the responsiveness
   * (and usability) of the application can drop noticeably.
   *
   * The batchedSubscribe enhancer, combined with the use of the _.debounce function,
   * is a way of preventing this behavior, by preventing Redux from notifying React
   * about changes to the Store until at least X time has passed between updates.
   *
   * Lore sets this value to 0 by default, which translates to "one tick". This delay
   * should be undetectable to users, but just long enough to make sure that all actions
   * from a normalized response are processed before React is notified of the change.
   */

  // enhancer: function(middleware, config) {
  //   return compose(
  //     applyMiddleware.apply(null, middleware),
  //     batchedSubscribe(_.debounce(function(notify) {
  //       notify();
  //     }, config.redux.debounceWait))
  //   );
  // },

  /**
   * Combine all reducers into a single reducer function, which will be used
   * by the Redux store. If there are no reducers, returns an empty function
   * to prevent Redux from throwing an error.
   *
   * http://redux.js.org/docs/api/combineReducers.html
   */

  // rootReducer: function(reducers) {
  //   const hasReducers = Object.keys(reducers).length > 0;
  //   return hasReducers ? combineReducers(reducers) : function() {};
  // },

  /**
   * Initial state of the Redux store. Any data you specify here will
   * be in the store when the application starts.
   *
   * http://redux.js.org/docs/api/createStore.html
   */

  // preloadedState: function() {
  //   return {};
  // },

  /**
   * Configure the Store used by the application
   *
   * http://redux.js.org/docs/api/createStore.html
   */

  // configureStore: function(rootReducer, preloadedState, enhancer) {
  //   return createStore(rootReducer, preloadedState, enhancer);
  // }

}