- Fix for (#84 - Allow observer to unsubscribe from all subscriptions whilst executing the callback from a previous subscription
- Fix for (#82) -
Throw an informative exception when
FluxorComponent
orFluxorLayout
has been inherited and the descendant doesn't callbase.OnInitialized()
. - Fix for (#77) - Exception thrown initialising store in .NET 5.
- Ensure synchronous effects are executed synchronously (#76) - Reverts changes for (#74) Endless loop redirects as these are no longer occur.
- Bug fix for (#74) - Handle endless loop redirects caused by Routing middleware.
- Breaking change:
FluxorException
is now anabstract
class. - Unhandled exceptions in Effects can now notify the UI.
- Breaking change:
EffectMethod
andReducerMethod
decorated methods must now be public - although they can be methods of internal classes. - New
IActionSubscriber
to receive notifications before actions are reduced into state and before Effects are triggered - More speed improvements in
options.ScanAssemblies
- Subscriptions to the
StateChanged
event will now be triggered before FluxorComponent/FluxorLayout notified of changes (so manual subscriptions are executed before rendering) - Added link with more information for when
DisposableCallback
throws an error because it has not been disposed
- Improved speed of app start-up when using
options.ScanAssemblies
- Assemblies are now signed
- Set project options to treat all warnings as errors
- Fixed bug that caused exception when using
.ConfigureAwait
in an Effect (#20) - Ensured add/remove on events are thread safe (#23)
- Made it easier to find the source of DisposableCallback instances that are not disposed (#24)
- State properties were not discovered if they were declared as private in a base class (#25)
- Handle disposing of partially created DisposableAction (#29)
- Used Newtonsoft entirely for JS interop to ReduxDevTools to prevent serialization errors (#7)
- Added new FluxorLayout for auto-subscribing to state (#8)
- Bug fix for (#134) - URLs not taking into account query parameters
- Update NuGet package icons.
- Rewritten to make the library UI agnostic
Fluxor
- Separated out
Blazor.Fluxor
intoFluxor.Blazor.Web
- Separated out
Fluxor.Blazor.Web.ReduxDevTools
- Added new documentation
- Added basic-concepts tutorials demonstrating how to use Fluxor in a console app.
- Change
@Store.Initialize
to<Blazor.Fluxor.StoreInitializer/>
component, to allow async calls (fixes #120)
2.0 Release notes
In your App.razor
files replace the call to @Store.Initialize
with <Blazor.Fluxor.StoreInitializer/>
- Handle TaskCanceledException when initialising the store and server has disconnected from the client.
- Updated to SDK 3.1.2
- Made dispatching actions thread safe (#117)
- Fixed bug #110 (Cannot use Redux Dev Tools on server side)
- Fixed bug #98 (Cannot initialize store)
- Upgraded to DotNet Core 3.1 preview 4
- Prevent JavaScript initialisation from being executed twice.
- Add
IState.Unsubscribe
- Change store initialization technique to make server-side Blazor apps work on iOS and OSX browsers.
NOTE: You must manually add a script reference to _content/Blazor.Fluxor/index.js
to the host page in server-side apps.
- Initialise store in App.razor instead of MainLayout.razor
- First major release
- Upgraded to DotNet Core 3
- Work around for Blazor bug that stops injected scripts working in Safari.
- Allow multiple reducers in a class (and static reducers) with
[ReducerMethod]
- Allow multiple effects in a class (and static effects) with
[EffectMethod]
- Removed
MultiActionReducer<TState>
due to newReducerMethodAttribute
Issues fixed
- Update to Blazor RC1
- Remove White=Positive / Black=Negative terms - Use Include/Exclude instead.
- Update to Blazor preview 9
- Added a new class
MultiActionReducer<TState>
that allows you to combine multiple reducers into a single class.
- Fixed a harmless null reference error when running server-side
- Fixed FlightFinder sample's UI and binding
- TypeExtensions.GetNamespace extension method removed in favor of Type.Namespace
- Fixed bug that caused an error when the project contained an abstract class that implements a Fluxor interface
- Added a StateChanged event to IFeature<T> and IState<T>
- Update to Blazor preview 8
- Update to Blazor preview 7
- Alter the icon that appears in NuGet
- Remove IAction. Actions may now be any type of object.
NOTE: Due to a bug in System.Text.Json the ReduxDevTools do not work in this release.
- Upgraded to latest packages (.net core v3.0.0-preview6.19307.2)
- Upgraded to latest packages (.net core v3.0.0-preview5-19227-01)
- Upgraded to latest packages (.net core v3.0.0-preview4-19216-03)
- Rename *.cshtml to *.razor
- Change project start up code to reflect most recent approach
- Upgraded to latest packages (.net core v3.0.0-preview3-19153-02)
- Upgraded to Blazor 0.9.0
- Upgraded to Blazor 0.8.0 (Thanks to @chris_sainty on Twitter)
- Changed UseDependencyInjection to use
AddScoped
instead ofAddSingleton
so server-side Blazor apps do not share the same store across clients.
- Upgraded to Blazor 0.7.0
- Upgraded to Blazor 0.6.0
- Added a Task to IStore named
Initialized
that can be awaited inOnInitializedAsync
- Added setTimeout workaround because Blazor won't allow calling StateHasChanged when the page loads
- Queue dispatched actions until store is initialized and then dequeue them.
- Made demos reference NuGet packages so they can be downloaded separately.
Issues fixed
- Upgraded to Blazor 0.5.1.
- Effects and Middlewares must now call
IDispatcher.Dispatch()
to dispatch actions.
- Added state change observer pattern. Calling
SomeInjectedState.Changed(this, StateHasChanged)
in a component'sOnInitialized
method will subscribe to all state changes triggered by other components. - Changed
IState.Current
toIState.Value
- Modified the official Blazor
Flight Finder
demo to use Fluxor. Status is incomplete but functional.
- Changed the way Effects and Reducers work so the developer has more flexibility in chosing what they react to (descendant classes, implemented interfaces, etc)
- Added unit tests
- Change versioning scheme to match the Blazor approach (increment minor version per release)
- Make BrowserInterop an injected service
- Ensure DisposableCallback can only be disposed once
- Change Store.Features from IEnumerable<IFeature> to IReadonlyDictionary<string, Feature> for fast lookup and prevention of duplicate keys
- Make Store.BeginInternalMiddlewareChange re-entrant
- Fix NullReferenceException that could occur when Middleware returned null from IMiddleware.AfterDispatch
- Allow middleware to return tasks to dispatch from IMiddleware.AfterDispatch
- Make methods of
Feature<TState>
virtual. - Upgraded to Blazor 0.4.0
- Introduced IDispatcher for dispatching actions from Blazor components so that the whole IStore isn't required.
- Introduced IState for providing feature state to Blazor components so that the entire IFeature<T> doesn't need to be referenced.
- Renamed
Handle
toHandleAsync
in effects - Added source docs
- Added an example showing how to create Middleware modules for Fluxor
- Fixed a bug where components were not displaying state updates when actions effecting their state were dispatched from another component
- Renamed IStoreMiddleware to IMiddleware
- Allow middleware to veto the dispatching of actions
- Allow middleware to declare Javascript it needs to be added into the site's html page
- Add routing middleware
- Exclude auto-discovery of features / reducers / effects in namespaces that contain a class that implements IMiddleware
- Auto register features / reducers / effects for classes in the same namespace (or below) of any class added with Options.AddMiddleware
- Changed the signature of IStore.Dispatch to IStore.DispatchAsync
- Upgraded to latest version of Blazor (0.3.0)
- Changed the signature of ServiceCollection.AddFluxor to pass in an Options object
- Added support for Redux Dev Tools
- Added support for adding custom Middleware
- Changed side-effects to return an array of actions to dispatch rather than limiting it to a single action
- Added side-effects for calling out to async routines such as HTTP requests
- Added a sample application to the [Sample projects][8]
- Automatic discovery of store, features, and reducers via dependency injection.
- Basic store / feature / reducer implementation