NgRx Standalone API

NgRx Standalone API

In this article, I'll show how to use NgRx with Angular Standalone API. If you're not familiar with it, please refer to the barcioch.pro/angular-standalone-components-.. article. The following examples show how to define a store using NgModule and standalone api. It's not a NgRx usage guide, since I'll cover it in a different article.

NgRx with NgModule

Root store

The root store is usually defined in the main AppModule. The forRoot method is used so the whole app can access it.

@NgModule({
  imports: [
    StoreModule.forRoot({ router: routerReducer, authReducer: authReducer }),
    EffectsModule.forRoot([AuthEffects]),
    StoreRouterConnectingModule.forRoot(),
    StoreDevtoolsModule.instrument()
  ]
})

Feature store

When dealing with the feature modules I'm using forFeature method.

@NgModule({
  imports: [
    StoreModule.forFeature('featureKey', featureReducer),
    EffectsModule.forFeature([FeatureEffects]),
  ]
})

NgRx with standalone api

Root store

The root store should be defined within bootstrapApplication function. The store will be provided in the providers instead of NgModule.imports. The equivalents:

  • StoreModule.forRoot() -> provideStore()

  • EffectsModule.forRoot() -> provideEffects()

  • StoreRouterConnectingModule.forRoot() -> provideRouterStore()

  • StoreDevtoolsModule.instrument() -> provideStoreDevtools()

bootstrapApplication(AppComponent, {
  providers: [
    provideStore({ router: routerReducer, auth: AuthReducer }),
    provideEffects([AuthEffects]),
    provideRouterStore(),
    provideStoreDevtools(),
  ]
});

Feature store

The feature store has to be defined within the route providers instead of NgModule.imports. The equivalents:

  • StoreModule.forFeature() -> provideStoreFeature()

  • EffectsModule.forFeature() -> provideFeatureEffects()

export const featureRoutes: Route[] = [
  {
    path: '',
    providers: [
      provideStoreFeature('feature', featureReducer),
      provideFeatureEffects([FeatureEffects]),
    ],
  },
];

That's all. Using NgRx standalone api is very simple and the functions are self-explanatory.