Stator ist ein einfaches, di-orientiertes, redux-inspiriertes oder Modell-View-Update (MVU) -Experiment mit C# 9.0. Es funktioniert gut mit Blazor und MobileBlazorbindings, einschließlich der Freigabe von Zuständen zwischen dem Xamarin -Teil und dem Blazor -Teil einer hybriden mobilen App. Es sollte auch mit jedem anderen .NET -staatlichen Client -Modell funktionieren.
Ab 2021-04-08 unterstützt das Projekt nicht .NET Standard 2.0, nur .NET 5+
Dieses Projekt verwendet:
| Name | Nuget.org | feedz.io |
|---|---|---|
dotnet add package StateR | ||
dotnet add package StateR.Blazor | ||
dotnet add package StateR.Blazor.Experiments | ||
dotnet add package StateR.Experiments |
Das folgende Ausschnitt stellt ein Merkmal dar, der einen Zähler umgibt, in dem Sie den Wert der Count dieses Counter.State Increment , Decrement und Set können. Der Ausschnitt enthält auch den InitialState dieses Zählers.
services
. AddStateR ( appAssembly )
. AddAsyncOperations ( ) // Add support for Redux thunk-like helpers
. AddReduxDevTools ( ) // Add support for Redux DevTools
. Apply ( )
; using StateR ;
namespace BlazorMobileHybridExperiments . Features
{
public class Counter
{
public record State ( int Count ) : StateBase ;
public class InitialState : IInitialState < State >
{
public State Value => new State ( 0 ) ;
}
public record Increment : IAction ;
public record Decrement : IAction ;
public class Reducers : IReducer < State , Increment > , IReducer < State , Decrement >
{
public State Reduce ( State state , Increment action ) => state with { Count = state . Count + 1 } ;
public State Reduce ( State state , Decrement action ) => state with { Count = state . Count - 1 } ;
}
}
} Dann können wir aus einer Blazor -Komponente, die von StatorComponent erbt, diese Aktionen versenden.
@page "/counter"
@inherits StateR . Blazor . StatorComponent
@inject IState < Features . Counter . State > CounterState
< h1 > Counter < / h1 >
< p > Current count : @CounterState . Current . Count < / p >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Increment()))" > + < / button >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Decrement()))" > - < / button >Es ist nicht erforderlich, von
StatorComponentzu erben, eine Komponente (oder eine beliebige Klasse) kann sich manuell für eineIState<T>abonnieren.
Ich habe mit ein paar anderen Bibliotheken herumgespielt und war nicht 100% zufrieden damit, wie sie Sachen gemacht haben. Als ich also mit MobileBlazorbindings und den neuen Hybrid -Apps herumspielte, stellte ich fest, dass C# 9 -Platten gut dazu geeignet waren. Ich fing an, mit der Transformation unveränderlicher Typen (Aufzeichnungen) zu experimentieren und schließlich dieses Projekt zu erstellen.
Der Name StateR , ausgesprochen Stator , ist von MediatR inspiriert, das ursprünglich unter der Haube verwendet wurde, um die Befehle zu vermitteln.
Der Stator ist der stationäre Teil eines Rotationssystems [...]. Die Energie fließt durch einen Stator zum oder von der rotierenden Komponente des Systems.
Quelle: Wikipedia
Nachdem ich jahrelang davon gehört hatte, las ich darüber und fand das Konzept brillant, experimentierte damit und übernahm die Idee.
Diese Bibliothek basiert auf den von Redux eingeführten Konzepten.
Es gibt keinen Typ und keinen wirklichen DI in JavaScript, daher ist es sinnvoll, dass die Leute dort nicht berücksichtigt wurden, als sie Redux erstellt haben.
Ich habe die Redux Devtools -Implementierung auf Fluxor gestützt, das ein ähnliches Projekt ist, das ich einmal verwendet habe. Das half mir, die Implementierungszeit zu senken, um Stator mit Redux Devtools zu verbinden. Danke.
...
Bitte öffnen Sie ein Problem und seien Sie so klar wie möglich. Sehen Sie, wie man einen Beitrag leisten? Weitere Informationen.
Wenn Sie zum Projekt beitragen möchten, danke ich Ihnen zunächst für Ihr Interesse und lesen Sie bitte einen Beitrag zu Vorbevölkerungsprojekten für weitere Informationen.
Bitte lesen Sie bitte den Verhaltenskodex für alle Vorbevölkerungsrepositorys.
dotnet test /p:CollectCoverage=true => Deckung.json
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura => Coverage.cobertura.xml
dotnet test --collect:"XPlat Code Coverage" => TestResults/{Guid} /coverage.cobertura.xml
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
reportgenerator " -reports:test**coverage.cobertura.xml " -targetdir:coveragereport -reporttypes:Html