BlazorTags.State
0.1.3
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet add package BlazorTags.State --version 0.1.3
NuGet\Install-Package BlazorTags.State -Version 0.1.3
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="BlazorTags.State" Version="0.1.3" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add BlazorTags.State --version 0.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: BlazorTags.State, 0.1.3"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install BlazorTags.State as a Cake Addin
#addin nuget:?package=BlazorTags.State&version=0.1.3
// Install BlazorTags.State as a Cake Tool
#tool nuget:?package=BlazorTags.State&version=0.1.3
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
BlazorTags.State is an easy-to-use replacement for EditForm, EditContext, and the Input* components that provides Redux style state management to your Blazor applications.
Usage
- Add the BlazorTags.State NuGet package.
- Add the following namespaces to your _Imports.razor
@using BlazorTags.State
@using BlazorTags.State.Forms
@using BlazorTags.State.Interfaces
- Create your model, actions, and reducers, and be on your way!
Example
This is Counter.razor from BlazorTag.Samples, which is simply a new Blazor WebAssembly project with the changes mentioned above.
- StateInputText (and Number, Checkbox, etc) for the most part act like their counterparts in the Microsoft.AspNetCore.Components.Forms namespace.
- One change is that @bind-Value is not used since that is tightly tied to the two-way binding in EditContext. Instead, simply provide an expression that specifies the value bound to this input.
- In addition to ValueExpression, provide a Func<IStateAction> in the ActionCreator field that will be used when the value changes.
- Another change is that your reducer will also be responsible for validating your model.
@page "/counter"
<StateForm StateContext="stateContext" TState="Model" TReducer="Reducer">
<h1>Counter</h1>
<p>Field Updates: @stateContext.State.FieldsUpdated</p>
<StateInputText ValueExpression="() => stateContext.State.Name"
ActionCreator="value => new UpdateNameAction(value)"></StateInputText>
<StateInputNumber ValueExpression="() => stateContext.State.Age"
ActionCreator="value => new UpdateAgeAction(value)"></StateInputNumber>
</StateForm>
@code {
private StateContext<Model, Reducer> stateContext;
protected override void OnInitialized()
{
var model = new Model("Dan", 29, 0);
stateContext = new StateContext<Model, Reducer>(model);
base.OnInitialized();
}
private record Model(string Name, int Age, int FieldsUpdated);
private class Reducer : IReducer<Model>
{
public Model Reduce(Model state, IStateAction action)
{
switch (action)
{
case UpdateNameAction a:
return state with { Name = a.NewName, FieldsUpdated = state.FieldsUpdated + 1 };
case UpdateAgeAction a:
return state with { Age = a.NewAge, FieldsUpdated = state.FieldsUpdated + 1 };
default:
return state;
}
}
public void Validate(Model state, IFormContext formContext)
{
if (state.Age < 12 && formContext.TryGetPropertyData(state, "Age", out PropertyData ageData))
{
ageData.IsValid = false;
ageData.ValidationMessage = "You must be 12 to ride this amusement park attraction";
}
}
}
private record UpdateNameAction(string NewName) : IStateAction;
private record UpdateAgeAction(int NewAge) : IStateAction;
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net5.0
- Microsoft.AspNetCore.Components.Web (>= 5.0.6)
- Newtonsoft.Json (>= 13.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.