ReduxDelphi
1.0.0
Reduxdelphi est un conteneur d'état prévisible pour les applications Delphi en utilisant un flux de données unidirectionnel. Inspiré par https://github.com/reactjs/redux.
Ce projet est actuellement développé avec Delphi 10.1
L'échantillon TODOMVC est basé sur des structures de données immuables (listes génériques immuables).
Voici un exemple simple montrant l'utilisation de base du magasin, des actions, de la répartition, ...:
unit DemoCounterForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,
Redux;
type
TEnumAction= (INIT, INCREMENT, DECREMENT);
TFormDemoCounter = class (TForm)
ButtonInc: TButton;
ButtonDec: TButton;
LabelCounter: TLabel;
procedure ButtonIncClick (Sender: TObject);
procedure ButtonDecClick (Sender: TObject);
procedure FormShow (Sender: TObject);
private
FStore : IStore<Integer, TEnumAction>;
end ;
var
FormDemoCounter: TFormDemoCounter;
implementation
{ $R *.dfm }
procedure TFormDemoCounter.ButtonIncClick (Sender: TObject);
begin
FStore.dispatch(INCREMENT);
end ;
procedure TFormDemoCounter.ButtonDecClick (Sender: TObject);
begin
FStore.dispatch(DECREMENT);
end ;
procedure TFormDemoCounter.FormShow (Sender: TObject);
var
FReducer : TReducer<Integer,TEnumAction>;
begin
FReducer :=
function(State: Integer; Action: TEnumAction): Integer
begin
case Action of
INCREMENT:
Result := State + 1 ;
DECREMENT:
Result := State - 1 ;
else
Result := State;
end ;
end ;
FStore := TStore<Integer, TEnumAction>.Create(FReducer, 0 );
FStore.subscribe( procedure (State: Integer)
begin
LabelCounter.Caption := IntToStr(State);
end
);
FStore.dispatch(INIT);
end ;
end .