ReduxDelphi
1.0.0
ReduxDelphi是使用單向數據流的Delphi應用程序的可預測狀態容器。受https://github.com/reaectjs/redux的啟發。
該項目目前是通過Delphi 10.1開發的
TODOMVC樣本基於不變的數據結構(通用不可變的列表)。
這是一個簡單的示例,顯示了商店,操作,調度等的基本用法,...:
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 .