고정자는 C# 9.0을 사용한 간단하고 방향으로, Redux에서 영감을 얻거나 MVU (Model-View-Update) 실험 입니다. Xamarin 부분과 하이브리드 모바일 앱의 Blazor 부분 사이의 상태를 공유하는 것을 포함하여 Blazor 및 Mobile Blazorbindings와 잘 작동합니다. 다른 .NET 상태 클라이언트 모델과도 작동해야합니다.
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 에서 상속되는 Blazor 구성 요소에서 이러한 동작을 파견 할 수 있습니다.
@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 라는 이름의 Stater는 Stator 로 발음됩니다. MediatR 에서 영감을 얻은 후에는 처음에 후드 아래에서 명령을 중재하는 데 사용되었습니다.
고정자는 로터리 시스템의 고정 부분입니다 [...]. 에너지는 고정자를 통해 시스템의 회전 구성 요소로 흐릅니다.
출처 : Wikipedia
몇 년 동안 그것에 대해 들었을 때, 나는 그것에 대해 읽고 개념을 훌륭하게 발견하고 실험하고 아이디어를 채택했습니다.
이 라이브러리는 Redux가 도입 한 개념을 기반으로하지만 .NET은 JavaScript가 아니며 .NET Core는 종속성 주입 (DI)을 중심으로 구축되므로이를 활용하기로 결정했습니다.
JavaScript에는 유형과 실제 DI가 없으므로 그 사람들이 Redux를 구축 할 때이를 고려하지 않았다는 것이 합리적입니다.
나는 유사한 프로젝트 인 Fluxor에서 Redux DevTools 구현을 기반으로 한 번 사용했습니다. 이를 통해 고정자를 Redux DevTools와 연결하는 구현 시간을 줄였습니다. 감사해요.
...
문제를 열고 가능한 한 명확하게하십시오. 기여하는 방법을 보십니까? 자세한 정보.
프로젝트에 기여하고 싶다면 먼저 관심을 가져 주셔서 감사합니다. 자세한 내용은 오픈 소스 프로젝트를 Forevolve에 기여하십시오.
또한 모든 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