Search code examples
.net-coreblazorblazor-webassemblyfluxor

Fluxor: An effect which doesn't dispatch an action?


I'm using Fluxor to manage state in a Blazor wasm app.

I have the following effect which is triggered after getting a result from deleting an item:

    [EffectMethod]
    public Task HandleDeleteBudgetResultAction(DeleteBudgetResultAction action, IDispatcher dispatcher)
    {
        if (action.Success)
        {
            NavigationManager.NavigateTo("/budgets", false);
        }
        return Task.CompletedTask;
    }

Essentially, if the delete was successful, navigate back to the list page. If it wasn't, do nothing as we need to remain on the detail page.

In this scenario I do not need to dispatch an action, but I have to include the dispatcher parameter, as demanded by the EffectMethod attribute. And since I have no async processes in this method, I am returning Task.CompletedTask.

This obviously feels wrong, so my question is: is this a limitation of Fluxor, or have I architected the flow incorrectly? As far as I'm aware, an effect doesn't have to dispatch an action.

I was thinking I might need to move my navigation state into the store, but I think I'll just come across the same problem again because I'll still need to call NavigationManager from somewhere.

Any help or better solutions appreciated :)


Solution

  • It is a limitation of Fluxor. You can dispatch a GoAction instead of injecting the NavigationManager, as long as you have called UseRouting on the Fluxor options.

    builder.Services.AddFluxor(options => options
      .UseRouting()
      .ScanAssemblies(typeof(Program).Assembly)