Imato.Blazor.State 1.0.4

dotnet add package Imato.Blazor.State --version 1.0.4                
NuGet\Install-Package Imato.Blazor.State -Version 1.0.4                
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="Imato.Blazor.State" Version="1.0.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Imato.Blazor.State --version 1.0.4                
#r "nuget: Imato.Blazor.State, 1.0.4"                
#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 Imato.Blazor.State as a Cake Addin
#addin nuget:?package=Imato.Blazor.State&version=1.0.4

// Install Imato.Blazor.State as a Cake Tool
#tool nuget:?package=Imato.Blazor.State&version=1.0.4                

Imato.Blazor.State

Simple Blazor state container

Usage
0. Setup app in Program.cs

using Imato.Blazor.State;

builder.AddStates<App>();

var app = builder.Build();
ServicesContainer.Register(app);
await app.RunAsync();
  1. Create state class
using Imato.Blazor.State;

public class WeatherForecastState : State<List<WeatherForecast>>
{
    private readonly HttpClient http;

    public WeatherForecastState(HttpClient http)
    {
        this.http = http;
    }

    protected override async Task Initialize()
    {
        await Reload();
    }

    public async Task Reload()
    {
        Value = await http.GetFromJsonAsync<List<WeatherForecast>>("sample-data/weather.json") ?? new List<WeatherForecast>();
    }
}
  1. Create razor page or component from using StateComponent then you have to use multiple states in one component. Just add state with GetStateOf<T>() or GetState<TState>()
@page "/fetchdata"
@inject HttpClient Http
@inherits StateComponent
...
@if (state == null || !state.Initialized)
{
    <p><em>Loading...</em></p>
}
...
@code {
    State<List<WeatherForecast>>? state;

    protected override async Task OnInitializedAsync()
    {
        state = await GetStateOf<List<WeatherForecast>>();
        // state = await GetState<WeatherForecastState>();
        await base.OnInitializedAsync();
    }

    void AddNew()
    {
        if (state != null)
        {
            ...
            state.Value.Add(n);
            // Replace state.Value on notify about changes state.StateChanged()
            state.StateChanged();
        }
    }
}

For one state per component use generic StateComponent<T>

@inherits StateComponent<List<WeatherForecast>>

<div>
    Total Forecasts: @State?.Count
</div>
Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.4 484 6/7/2022
1.0.2 444 5/27/2022
1.0.1 420 5/26/2022
1.0.0 415 5/26/2022

Ready to use