Middleware

public protocol Middleware

Middleware protocol that represents a suas store middleware A middleware helps extending the dispatch logic of Suas.

A middleware can be used to implement:

  • Logging that logs the state before and after the reducer changes it
  • Perform async network calls and dispatches actions representing the result when the network returns.
  • Other advanced usages…

Example

Implementing a logging middleware.

class LoggerMiddleware: Middleware {
  var api: MiddlewareAPI?
  var next: DispatchFunction?

  func onAction(action: Action, getState: @escaping GetStateFunction, dispatch: @escaping DispatchFunction, next: @escaping NextFunction) {
    // Read the state before any reducer changes it
    print("The old state is \(getState())")

    // Print the action
    print("The action is \(action)")

    // Continue the dispatching process..until the reducer reduces the action
    // Not calling `next` will prevent the action from reaching the reducer
    next?(action)

    // Read the state after any reducer changes it
    print("The new state is \(api?.state)")
  }
}
  • Function called when an action is dispatched

    Declaration

    Swift

    func onAction(action: Action,

    Parameters

    action

    the dispatched action

    • getState: a function that can be used to read the current Store state
    • dispatch: a function that can be used to dispatch new actions to the Store
    • next: function that represents the continuation of the dispatching process. The middleware can do the following with it:
    • If it calls next the execution will proceed and the action will eventually reach the reducer
    • If it does not call, then the action is said to be handled by the current middleware.
    • Middleware cancall next with a new action, this action is used instead of the original one.