Rules of Thumb pt2

When to create actions?

  • Anytime we want to interact with the store or API
  • No shortcuts
  • Use classes for actions
  • Use enums for action names
  • Export actions types using a union type
  • 3 action approach - request, success, failure
  • Consider Action Creators
Single action that does everything - Anti Pattern
// Single action that does everything
export class UpdateUsers implements Action {
readonly type = UserActionTypes.UpdateUsers;
constructor(public payload: { users: User[] }) {}

Sample Action

  • Don’t do it
  • Complicates reducers
  • Easy to mutate store
  • Prefer dictionaries vs arrays (NgRx Entity)

Maximize Selectors

Use Selectors to filter/manipulate data from the store
  • Supports parameters
  • Memoized
  • Release memoization

Service With a Subject

  • Most projects don’t need NgRx
  • Simple pattern
  • Works well with container/presenter
  • Upgradable to NgRx

Service with a subject basics

  • Regular Angular service
  • Private member variable of type BehaviorSubject
  • Public get prop to access stream
  • Service methods update stream

When NOT to use Service with a Subject?

  • Application or feature is complex
  • Want to track state changes
  • Recreate user errors
  • Implement advanced logging
Refactor Tour of Heroes to use Service with a subject