# getMutableReducer

### Prerequisites

{% hint style="warning" %}
Please read about [createDuck](https://co-it.gitbook.io/ngrx-ducks/ngrx-ducks-core/architecture/createduck) first before continue here. You nee a basic understanding about its API first.
{% endhint %}

### Generate a mutable reducer

The method `getMutableReducer` takes care about connecting your case-reducer functions with immer and finally builds a reducer function that can be registered in the Store.

{% tabs %}
{% tab title="chunk.ts" %}

```typescript
import { getMutableReducer, createMutableDuck } from '@ngrx-ducks/core';

@StoreChunk()
export class Chunk {
  static reducer = getMutableReducer(initialState, CounterMutableFacade);
  
  // Basic usage without case reducer
  // loadCount = createMutableDuck(
  //   '[Counter] Load Count',
  //   dispatch<number>()
  // );

  // Usage with a case reducer
  // increment = createMutableDuck(
  //   '[Counter] Increment value',
  //   (state: CounterState, payload: number) => (state.count += payload)
  // );
}
```

{% endtab %}

{% tab title="index.ts" %}

```typescript
import { Action, combineReducers } from '@ngrx/store';
import { MutableFacade } from './facade';
import { CounterState } from './counter.state';

export interface State {
  couter: CounterState;
}

export function reducers(state: State, action: Action) {
  return combineReducers<State>({
    couter: MutableFacade.reducer
  })(state, action);
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
You will find a full example of a mutable facade at [StackBlitz](https://stackblitz.com/edit/ngrx-ducks-12?file=src%2Fapp%2Fcounter%2Fstore%2Fcounter%2Fcounter-mutable.facade.ts).
{% endhint %}
