Options
All
  • Public
  • Public/Protected
  • All
Menu

Interface ActionReducerMapBuilder<State>

A builder for an action <-> reducer map.

Type Parameters

  • State

Hierarchy

  • ActionReducerMapBuilder

Index

Methods

  • Adds a case reducer to handle a single exact action type.

    remarks

    All calls to builder.addCase must come before any calls to builder.addMatcher or builder.addDefaultCase.

    Type Parameters

    • ActionCreator extends TypedActionCreator<string, ActionCreator>

    Parameters

    • actionCreator: ActionCreator

      Either a plain action type string, or an action creator generated by createAction that can be used to determine the action type.

    • reducer: CaseReducer<State, ReturnType<ActionCreator>>

      The actual case reducer function.

    Returns ActionReducerMapBuilder<State>

  • Adds a case reducer to handle a single exact action type.

    remarks

    All calls to builder.addCase must come before any calls to builder.addMatcher or builder.addDefaultCase.

    Type Parameters

    • Type extends string

    • A extends Action<Type, A>

    Parameters

    • type: Type
    • reducer: CaseReducer<State, A>

      The actual case reducer function.

    Returns ActionReducerMapBuilder<State>

  • Adds a "default case" reducer that is executed if no case reducer and no matcher reducer was executed for this action.

    example
    import { createReducer } from '@reduxjs/toolkit'
    const initialState = { otherActions: 0 }
    const reducer = createReducer(initialState, builder => {
    builder
    // .addCase(...)
    // .addMatcher(...)
    .addDefaultCase((state, action) => {
    state.otherActions++
    })
    })

    Parameters

    Returns {}

    • Allows you to match your incoming actions against your own filter function instead of only the action.type property.

      remarks

      If multiple matcher reducers match, all of them will be executed in the order they were defined in - even if a case reducer already matched. All calls to builder.addMatcher must come after any calls to builder.addCase and before any calls to builder.addDefaultCase.

      example
      import {
      createAction,
      createReducer,
      AsyncThunk,
      AnyAction,
      } from "@reduxjs/toolkit";

      type GenericAsyncThunk = AsyncThunk<unknown, unknown, any>;

      type PendingAction = ReturnType<GenericAsyncThunk["pending"]>;
      type RejectedAction = ReturnType<GenericAsyncThunk["rejected"]>;
      type FulfilledAction = ReturnType<GenericAsyncThunk["fulfilled"]>;

      const initialState: Record<string, string> = {};
      const resetAction = createAction("reset-tracked-loading-state");

      function isPendingAction(action: AnyAction): action is PendingAction {
      return action.type.endsWith("/pending");
      }

      const reducer = createReducer(initialState, (builder) => {
      builder
      .addCase(resetAction, () => initialState)
      // matcher can be defined outside as a type predicate function
      .addMatcher(isPendingAction, (state, action) => {
      state[action.meta.requestId] = "pending";
      })
      .addMatcher(
      // matcher can be defined inline as a type predicate function
      (action): action is RejectedAction => action.type.endsWith("/rejected"),
      (state, action) => {
      state[action.meta.requestId] = "rejected";
      }
      )
      // matcher can just return boolean and the matcher can receive a generic argument
      .addMatcher<FulfilledAction>(
      (action) => action.type.endsWith("/fulfilled"),
      (state, action) => {
      state[action.meta.requestId] = "fulfilled";
      }
      );
      });

      Type Parameters

      • A

      Parameters

      • matcher: TypeGuard<A> | ((action: any) => boolean)

        A matcher function. In TypeScript, this should be a type predicate function

      • reducer: CaseReducer<State, A extends AnyAction ? A : A & AnyAction>

        The actual case reducer function.

      Returns Omit<ActionReducerMapBuilder<State>, "addCase">

    Generated using TypeDoc