redux-fsharp
1.0.0
dotnet add package redux-fsharp --version 1.0.0
NuGet\Install-Package redux-fsharp -Version 1.0.0
<PackageReference Include="redux-fsharp" Version="1.0.0" />
paket add redux-fsharp --version 1.0.0
#r "nuget: redux-fsharp, 1.0.0"
// Install redux-fsharp as a Cake Addin #addin nuget:?package=redux-fsharp&version=1.0.0 // Install redux-fsharp as a Cake Tool #tool nuget:?package=redux-fsharp&version=1.0.0
redux-fsharp
Predictable state container for F# applications.
redux-fsharp is a Redux-like implementation of the unidirectional data flow architecture in F#.
Build on your machine
If you want to build this library on your machine, execute the following commands:
git clone https://github.com/galassie/redux-fsharp.git
cd redux-fsharp
dotnet build
If you want to run the tests, execute the following command:
dotnet test
Build in Docker
Required:
- Install Docker for your system
Build a Docker image called redux-fsharp
. This will work without any local .NET Core installation.
docker build -t redux-fsharp .
Use the following to instantiate a Docker container from the redux-fsharp
image and run the tests inside:
docker run --rm redux-fsharp dotnet test
Usage
State:
type State = { CurrentValue: int }
Actions:
type IncrementAction = { Amount: int }
type DecrementAction = { Amount: int }
type Actions =
| Increment of IncrementAction
| Decrement of DecrementAction
Reducer:
let incrementDecrementReducer state action =
match action with
| Increment { Amount = amount } -> { state with CurrentValue = state.CurrentValue + amount }
| Decrement { Amount = amount } -> { state with CurrentValue = state.CurrentValue - amount }
Subscriber:
let consoleLogSubscriber state =
printfn "Current value: %d" state.CurrentValue
Program:
[<EntryPoint>]
let main argv =
let store = createStore incrementDecrementReducer { CurrentValue = 0 } id
let unsubscribe = store.Subscribe(consoleLogSubscriber)
store.Dispatch (Increment { Amount = 1 }) |> ignore
store.Dispatch (Increment { Amount = 2 }) |> ignore
store.Dispatch (Decrement { Amount = 1 }) |> ignore
unsubscribe() |> ignore
store.Dispatch (Decrement { Amount = 1 }) |> ignore
let lastState = store.GetState()
printfn "Expected Current value should be 1"
printfn "Actual Current value is %d" lastState.CurrentValue
0 // return an integer exit code
Examples
Contributing
Code contributions are more than welcome! 😻
Please commit any pull requests against the master
branch.
If you find any issue, please report it!
License
This project is licensed under The MIT License (MIT).
Author: Enrico Galassi
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. 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. |
.NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.1 is compatible. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- FSharp.Core (>= 6.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.