ステーターは、C#9.0を使用した、シンプルで、Di指向、Reduxにインスパイアされた、またはモデルビューアップデート(MVU)実験です。 Xamarin部品とハイブリッドモバイルアプリのブレザー部分の間で状態を共有するなど、BlazorとMobileBlazorbindingsでうまく機能します。また、他の.NET Statefulクライアントモデルでも動作するはずです。
2021-04-08の時点で、プロジェクトは.NET標準2.0をサポートせず、.NET 5+のみ
このプロジェクトは次のとおりです。
| 名前 | nuget.org | feedz.io |
|---|---|---|
dotnet add package StateR | ||
dotnet add package StateR.Blazor | ||
dotnet add package StateR.Blazor.Experiments | ||
dotnet add package StateR.Experiments |
次のスニペットは、カウンターを囲む機能を表します。この機能では、そのCounter.StateのCountプロパティの値をIncrement 、 Decrement 、およびSetできます。スニペットには、そのカウンターのInitialStateも含まれています。
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 } ;
}
}
}次に、 StatorComponentから継承するブレザーコンポーネントから、それらのアクションを派遣できます。
@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 >
StatorComponentから継承する必要はありません。コンポーネント(または任意のクラス)は、任意のIState<T>を手動で購読できます。
私は他のいくつかのライブラリと遊んでいましたが、彼らがどのように物事をしたかに100%満足していませんでした。したがって、MobileBlazorbindingsと新しいハイブリッドアプリで遊んでいる間、C#9レコードがこれに最適であることがわかりました。私は不変のタイプ(記録)の変換の実験を始め、このプロジェクトを作成することになりました。
StateRという名前のStatorと発音された名前は、コマンドを媒介するために最初にボンネットの下で使用されていたMediatRに触発されています。
ステーターは、ロータリーシステムの固定部分です[...]。エネルギーは、システムの回転コンポーネントに固定子を通って流れます。
出典:ウィキペディア
何年もそれについて聞いた後、私はそれについて読んで、その概念が素晴らしいことを見つけ、それを実験し、そのアイデアを採用しました。
このライブラリはReduxによって導入された概念に基づいていますが、.NETはJavaScriptではなく、.NET Coreは依存関係噴射(DI)を中心に構築されているため、それを利用することにしました。
JavaScriptにはタイプも実際のDIもありませんので、そこにいる人々がReduxを構築したときにそれを考慮しなかったことは理にかなっています。
私は、一度使用した同様のプロジェクトであるFluxorにRedux DevToolsの実装を基にしています。これにより、ステーターをRedux Devtoolsと接続するための実装時間を短縮することができました。ありがとう。
...
問題を開いて、できるだけ明確にしてください。貢献する方法をご覧ください。詳細については。
プロジェクトに貢献したい場合は、最初に、ご関心をお寄せいただきありがとうございます。
また、すべてのForeVolveリポジトリに適用される貢献者契約行動規範をお読みください。
dotnet test /p:CollectCoverage=true => coverage.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