@available(*, deprecated, message: "Use AnySideEffect instead") public protocol ActionWithSideEffect : Action
Action can implement this protocol to perform side effects when an instance is
A side effect is nothing more than a piece of code that can interact with external
services or APIs (e.g., make a network request, get information from the disk and so on).
Side effects are needed because the
updatedState(currentState:) function (which is the only other operation
that is performed when an action is dispatched) must be pure and therefore it cannot
interact with disk, network and so on.
You can see from the
sideEffect(currentState:previousState:dispatch:dependencies:) signature that
a side effect takes as input some dependencies. This is a form of dependency injection
for the side effects. By using only methods coming from the dependencies (instead of relying on
global imports), testing is much more easier since you can inject a mocked version
of the things you need in the side effect. For example, in a test, you may want to
inject a mocked version of the class that manages the API requests, in order to control
the result of the network call.
Performs the side effect. This method is invoked when the action is dispatched, after the
the current state. The one returned by the
the state of the store before the
a closure that can be used to dispatch new actions
the dependencies of the side effect