# nested-combine-reducers

> Allows you to create your root reducer in one go, instead of individually combine slice reducers

Latest version **2.0.0** (published 2021-01-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install nested-combine-reducers
pnpm add nested-combine-reducers
yarn add nested-combine-reducers
bun add nested-combine-reducers
```

## Health

**Score 30/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities; high quality score.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2021-01-30 |
| First published | 2018-06-03 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 0 |
| Unpacked size | 14.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 9 |
| Author | Federico Paolillo |
| Maintainers | federico-paolillo |
| Keywords | redux, utility, combine, reducers, nested, deep, combineReducers |

## Links

- npm: https://www.npmjs.com/package/nested-combine-reducers
- Repository: https://github.com/federico-paolillo/nested-combine-reducers
- Homepage: https://github.com/federico-paolillo/nested-combine-reducers#readme
- Issues: https://github.com/federico-paolillo/nested-combine-reducers/issues
- npm.io page: https://npm.io/package/nested-combine-reducers

## Alternatives

- [lodash.assign](https://npm.io/package/lodash.assign.md) — 2.3M weekly downloads
- [lodash.chunk](https://npm.io/package/lodash.chunk.md) — 1.8M weekly downloads
- [react-native-ios-utilities](https://npm.io/package/react-native-ios-utilities.md) — 138.5K weekly downloads
- [@technically/lodash](https://npm.io/package/@technically/lodash.md) — 50.9K weekly downloads
- [@fluid-topics/ft-icon](https://npm.io/package/@fluid-topics/ft-icon.md) — 20.6K weekly downloads

## Recent versions

- 2.0.0 (latest) — 2021-01-30
- 1.2.2 — 2019-08-29
- 1.2.1 — 2019-08-29
- 1.2.0 — 2019-08-29
- 1.0.1 — 2018-06-03
- 1.0.0 — 2018-06-03

## README

![GitHub](https://img.shields.io/github/license/federico-paolillo/nested-combine-reducers?style=flat-square)
![Codecov](https://img.shields.io/codecov/c/github/federico-paolillo/nested-combine-reducers?style=flat-square)
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/federico-paolillo/nested-combine-reducers/continuous-integration?label=CI&style=flat-square)  

# nested-combine-reducers

Allows you to create your root reducer in one go, instead of individually combine slice reducers.  

# Introduction

Tipically you divide your state tree in multiple slices, each handled by its own reducer.  
For example:

```javascript
const reducers = {
    ui: uiReducer,
    data: dataReducer
};
```
But if you want to further split your slices in even more slices you would have to do:

```javascript
const postsReducer = combineReducers({
    items: itemsReducer,
    favourites: favouritePostsReducer
});

const commentsReducer = ...;

const dataReducer = combineReducers({
    posts: postsReducer,
    comments: commentsReducer
});

const rootReducer = combineReducers({
    data: dataReducer,
});
```

As you can see you have to call `combineReducers` multiple times, *potentially losing the overview of your state shape*.  
In fact, from the example above, it is not immediately clear what the state shape looks like.  

This library tries to simplify the creation process of the root reducer by allowing to use a reducers map with nested reducing functions.  

The example above using `nestedCombineReducers` would become:

```javascript
const rootReducer = nestedCombineReducers({
    data: {
        posts: {
            items: itemsReducer,
            favourites: favouritePostsReducer
        },
        comments: ...
    }
});
```

Thanks to `nestedCombineReducers` it is immediately clear what the state shape looks like when your are creating your root reducer.  
You can also use `nestedCombineReducers` to create just a slice and then create the rest of your root reducer with `combineReducer`.  

# Usage

Simply pass your reducers map object to `nestedCombineReducers` to get back your root reducer, like so:  

```javascript
const rootReducer = nestedCombineReducers({
    data: {
        posts: {
            items: itemsReducer,
            favourites: favouritePostsReducer
        },
        comments: ...
    }
});
```

## With CommonJS

const { nestedCombineReducers } = require('nested-combine-reducers/cjs');

**Note:** Import from /cjs folder !

## With ES Modules

import { nestedCombineReducers } from 'nested-combine-reducers'

# Installation

**Note:** This library requires at least Redux 4. 

You can get `nestedCombineReducers` from NPM by running `npm install nested-combine-reducers`.  
The NPM package is hybrid, that means that you get both the ES Modules and the CommonJS version.  
`nestedCombineReducers` is written in TypeScript and typings are provided with the package.  
Frankly, I'm not a fan of having small utility functions installed as a dependency, therefore I suggest to simply copy/paste the function.

---
_Source: https://npm.io/package/nested-combine-reducers · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
