ctefan / redux
This package is abandoned and no longer maintained.
No replacement package was suggested.
A PHP port of Redux
0.1.0
2018-10-30 19:24 UTC
Requires
- php: ^7.2
- evenement/evenement: ^3.0
Requires (Dev)
- phpunit/phpunit: ^7
This package is auto-updated.
Last update: 2020-08-29 07:08:48 UTC
README
A PHP port of Redux. Partly inspired by the ports of RafaelFontes and rikbruil.
Background
This library was created to be used in a framework for interactive cli applications.
Example usage
Reducers
// Create a reducer. $reducer = function($state, ActionInterface $action) { switch ($action->getType()) { case 'add': $state += $action->getPayload(); break; case 'subtract': $state -= $action->getPayload(); break; } return $state; }; $initialState = 0; // Create the store. $store = Redux::createStore($reducer, $initialState); // Dispatch some actions. $store->dispatch(new Action('add', 5)); $store->dispatch(new Action('subtract', 2)); assert(3 === $store->getState());
Middleware
Middleware are just callables. If you don't want to use closures, you can extend
Ctefan\Redux\Middleware\AbstractMiddleware
and implement method handleAction(ActionInterface $action, callable $next)
.
// Create the middleware. $middleware = function(callable $getState, callable $dispatch): callable { return function($next): callable { return function(ActionInterface $action) use ($next) { // TODO do something like fetching data from a remote server, waiting for a promise etc. return $next($action); } } }; // Create the store. $store = Redux::createStore($reducer, $initialState, Redux::applyMiddleware($middleware));