# overview

[![Redux Logo](https://d33wubrfki0l68.cloudfront.net/0834d0215db51e91525a25acf97433051f280f2f/c30f5/img/redux.svg)**Redux**](https://redux.js.org/)

[Getting Started](https://redux.js.org/introduction/getting-started)[Tutorial](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)[API](https://redux.js.org/api/api-reference)[FAQ](https://redux.js.org/faq)[Best Practices](https://redux.js.org/style-guide/style-guide)[GitHub](https://www.github.com/reduxjs/redux)[Need help?](https://redux.js.org/introduction/getting-started#help-and-discussion)

🌜

🌞

Search

[![Redux Logo](https://d33wubrfki0l68.cloudfront.net/0834d0215db51e91525a25acf97433051f280f2f/c30f5/img/redux.svg)**Redux**](https://redux.js.org/)

* [Getting Started](https://redux.js.org/introduction/getting-started)
* [Tutorial](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)
* [API](https://redux.js.org/api/api-reference)
* [FAQ](https://redux.js.org/faq)
* [Best Practices](https://redux.js.org/style-guide/style-guide)
* [GitHub](https://www.github.com/reduxjs/redux)
* [Need help?](https://redux.js.org/introduction/getting-started#help-and-discussion)
* [Introduction](#!)
  * [Getting Started with Redux](https://redux.js.org/introduction/getting-started)
  * [Installation](https://redux.js.org/introduction/installation)
  * [Core Concepts](https://redux.js.org/introduction/core-concepts)
  * [Learning Resources](https://redux.js.org/introduction/learning-resources)
  * [Ecosystem](https://redux.js.org/introduction/ecosystem)
  * [Examples](https://redux.js.org/introduction/examples)
* [Tutorials](#!)
  * [Tutorials Index](https://redux.js.org/tutorials/index)
  * [Quick Start](https://redux.js.org/tutorials/quick-start)
  * [TypeScript Quick Start](https://redux.js.org/tutorials/typescript-quick-start)
  * [Redux Essentials](#!)
    * [Redux Overview and Concepts](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)
    * [Redux App Structure](https://redux.js.org/tutorials/essentials/part-2-app-structure)
    * [Basic Redux Data Flow](https://redux.js.org/tutorials/essentials/part-3-data-flow)
    * [Using Redux Data](https://redux.js.org/tutorials/essentials/part-4-using-data)
    * [Async Logic and Data Fetching](https://redux.js.org/tutorials/essentials/part-5-async-logic)
    * [Performance and Normalizing Data](https://redux.js.org/tutorials/essentials/part-6-performance-normalization)
  * [Redux Fundamentals](#!)
    * [Redux Overview](https://redux.js.org/tutorials/fundamentals/part-1-overview)
    * [Redux Concepts and Data Flow](https://redux.js.org/tutorials/fundamentals/part-2-concepts-data-flow)
    * [State, Actions, and Reducers](https://redux.js.org/tutorials/fundamentals/part-3-state-actions-reducers)
    * [Store](https://redux.js.org/tutorials/fundamentals/part-4-store)
    * [UI and React](https://redux.js.org/tutorials/fundamentals/part-5-ui-react)
    * [Async Logic and Data Fetching](https://redux.js.org/tutorials/fundamentals/part-6-async-logic)
    * [Standard Redux Patterns](https://redux.js.org/tutorials/fundamentals/part-7-standard-patterns)
    * [Modern Redux with Redux Toolkit](https://redux.js.org/tutorials/fundamentals/part-8-modern-redux)
* [Recipes](#!)
  * [Recipes: Index](https://redux.js.org/recipes/recipe-index)
  * [Configuring Your Store](https://redux.js.org/recipes/configuring-your-store)
  * [Usage With TypeScript](https://redux.js.org/recipes/usage-with-typescript)
  * [Migrating to Redux](https://redux.js.org/recipes/migrating-to-redux)
  * [Using Object Spread Operator](https://redux.js.org/recipes/using-object-spread-operator)
  * [Reducing Boilerplate](https://redux.js.org/recipes/reducing-boilerplate)
  * [Server Rendering](https://redux.js.org/recipes/server-rendering)
  * [Writing Tests](https://redux.js.org/recipes/writing-tests)
  * [Computing Derived Data](https://redux.js.org/recipes/computing-derived-data)
  * [Implementing Undo History](https://redux.js.org/recipes/implementing-undo-history)
  * [Isolating Redux Sub-Apps](https://redux.js.org/recipes/isolating-redux-sub-apps)
  * [Code Splitting](https://redux.js.org/recipes/code-splitting)
  * [Troubleshooting](https://redux.js.org/recipes/troubleshooting)
  * [Structuring Reducers](#!)
    * [Structuring Reducers](https://redux.js.org/recipes/structuring-reducers/structuring-reducers)
    * [Prerequisite Concepts](https://redux.js.org/recipes/structuring-reducers/prerequisite-concepts)
    * [Basic Reducer Structure](https://redux.js.org/recipes/structuring-reducers/basic-reducer-structure)
    * [Splitting Reducer Logic](https://redux.js.org/recipes/structuring-reducers/splitting-reducer-logic)
    * [Refactoring Reducers Example](https://redux.js.org/recipes/structuring-reducers/refactoring-reducer-example)
    * [Using combineReducers](https://redux.js.org/recipes/structuring-reducers/using-combinereducers)
    * [Beyond combineReducers](https://redux.js.org/recipes/structuring-reducers/beyond-combinereducers)
    * [Normalizing State Shape](https://redux.js.org/recipes/structuring-reducers/normalizing-state-shape)
    * [Updating Normalized Data](https://redux.js.org/recipes/structuring-reducers/updating-normalized-data)
    * [Reusing Reducer Logic](https://redux.js.org/recipes/structuring-reducers/reusing-reducer-logic)
    * [Immutable Update Patterns](https://redux.js.org/recipes/structuring-reducers/immutable-update-patterns)
    * [Initializing State](https://redux.js.org/recipes/structuring-reducers/initializing-state)
* [Understanding Redux](#!)
  * [Thinking in Redux](#!)
    * [Motivation](https://redux.js.org/understanding/thinking-in-redux/motivation)
    * [Three Principles](https://redux.js.org/understanding/thinking-in-redux/three-principles)
    * [Glossary](https://redux.js.org/understanding/thinking-in-redux/glossary)
  * [History and Design](#!)
    * [Prior Art](https://redux.js.org/understanding/history-and-design/prior-art)
    * [Middleware](https://redux.js.org/understanding/history-and-design/middleware)
* [FAQ](#!)
  * [FAQ Index](https://redux.js.org/faq)
  * [General](https://redux.js.org/faq/general)
  * [Reducers](https://redux.js.org/faq/reducers)
  * [Organizing State](https://redux.js.org/faq/organizing-state)
  * [Store Setup](https://redux.js.org/faq/store-setup)
  * [Actions](https://redux.js.org/faq/actions)
  * [Immutable Data](https://redux.js.org/faq/immutable-data)
  * [Code Structure](https://redux.js.org/faq/code-structure)
  * [Performance](https://redux.js.org/faq/performance)
  * [Design Decisions](https://redux.js.org/faq/design-decisions)
  * [React Redux](https://redux.js.org/faq/react-redux)
  * [Miscellaneous](https://redux.js.org/faq/miscellaneous)
* [Style Guide](#!)
  * [Style Guide: Best Practices](https://redux.js.org/style-guide/style-guide)
* [API Reference](#!)
  * [API Reference](https://redux.js.org/api/api-reference)
  * [createStore](https://redux.js.org/api/createstore)
  * [Store](https://redux.js.org/api/store)
  * [combineReducers](https://redux.js.org/api/combinereducers)
  * [applyMiddleware](https://redux.js.org/api/applymiddleware)
  * [bindActionCreators](https://redux.js.org/api/bindactioncreators)
  * [compose](https://redux.js.org/api/compose)
* [Redux Toolkit](#!)
  * [Redux Toolkit: Overview](https://redux.js.org/redux-toolkit/overview)

### What is Redux Toolkit?[#](#what-is-redux-toolkit)

[**Redux Toolkit**](https://redux-toolkit.js.org/) is our official, opinionated, batteries-included toolset for efficient Redux development. It is intended to be the standard way to write Redux logic, and we strongly recommend that you use it.

It includes several utility functions that simplify the most common Redux use cases, including store setup, defining reducers, immutable update logic, and even creating entire "slices" of state at once without writing any action creators or action types by hand. It also includes the most widely used Redux addons, like Redux Thunk for async logic and Reselect for writing selector functions, so that you can use them right away.

#### Installation[#](#installation)

Redux Toolkit is available as a package on NPM for use with a module bundler or in a Node application:

\# NPM

npm install @reduxjs/toolkit

\# Yarn

yarn add @reduxjs/toolkit

Copy

### Purpose[#](#purpose)

The Redux core library is deliberately unopinionated. It lets you decide how you want to handle everything, like store setup, what your state contains, and how you want to build your reducers.

This is good in some cases, because it gives you flexibility, but that flexibility isn't always needed. Sometimes we just want the simplest possible way to get started, with some good default behavior out of the box. Or, maybe you're writing a larger application and finding yourself writing some similar code, and you'd like to cut down on how much of that code you have to write by hand.

**Redux Toolkit** was originally created to help address three common concerns about Redux:

* "Configuring a Redux store is too complicated"
* "I have to add a lot of packages to get Redux to do anything useful"
* "Redux requires too much boilerplate code"

We can't solve every use case, but in the spirit of [`create-react-app`](https://github.com/facebook/create-react-app) and [`apollo-boost`](https://dev-blog.apollodata.com/zero-config-graphql-state-management-27b1f1b3c2c3), we can provide an official recommended set of tools that handle the most common use cases and reduce the need to make extra decisions.

### Why You Should Use Redux Toolkit[#](#why-you-should-use-redux-toolkit)

**Redux Toolkit** makes it easier to write good Redux applications and speeds up development, by baking in our recommended best practices, providing good default behaviors, catching mistakes, and allowing you to write simpler code. Redux Toolkit is **beneficial to all Redux users** regardless of skill level or experience. It can be added at the start of a new project, or used as part of an incremental migration in an existing project.

Note that **you are not&#x20;**_**required**_**&#x20;to use Redux Toolkit to use Redux**. There are many existing applications that use other Redux wrapper libraries, or write all Redux logic "by hand". **If you prefer to use a different approach, go ahead!**

Overall, whether you're a brand new Redux user setting up your first project, or an experienced user who wants to simplify an existing application, **using Redux Toolkit will make your code better and more maintainable**.

### What's Included[#](#whats-included)

Redux Toolkit includes:

* A [`configureStore()` function](https://redux-toolkit.js.org/api/configureStore) with simplified configuration options. It can automatically combine your slice reducers, adds whatever Redux middleware you supply, includes `redux-thunk` by default, and enables use of the Redux DevTools Extension.
* A [`createReducer()` utility](https://redux-toolkit.js.org/api/createReducer) that lets you supply a lookup table of action types to case reducer functions, rather than writing switch statements. In addition, it automatically uses the [`immer` library](https://github.com/mweststrate/immer) to let you write simpler immutable updates with normal mutative code, like `state.todos[3].completed = true`.
* A [`createAction()` utility](https://redux-toolkit.js.org/api/createAction) that returns an action creator function for the given action type string. The function itself has `toString()` defined, so that it can be used in place of the type constant.
* A [`createSlice()` function](https://redux-toolkit.js.org/api/createSlice) that accepts a set of reducer functions, a slice name, and an initial state value, and automatically generates a slice reducer with corresponding action creators and action types.
* The [`createSelector` utility](https://redux-toolkit.js.org/api/createSelector) from the [Reselect](https://github.com/reduxjs/reselect) library, re-exported for ease of use.

### Documentation[#](#documentation)

The complete Redux Toolkit documentation is available at [**https://redux-toolkit.js.org**](https://redux-toolkit.js.org/).

#### Documentation Links[#](#documentation-links)

* **Introduction**
  * [Quick Start](https://redux-toolkit.js.org/introduction/quick-start)
* **Tutorials**
  * [Basic Tutorial](https://redux-toolkit.js.org/tutorials/basic-tutorial)
  * [Intermediate Tutorial](https://redux-toolkit.js.org/tutorials/intermediate-tutorial)
  * [Advanced Tutorial](https://redux-toolkit.js.org/tutorials/advanced-tutorial)
* **Using Redux Toolkit**
  * [Usage Guide](https://redux-toolkit.js.org/usage/usage-guide)
* **API Reference**
  * [`configureStore`](https://redux-toolkit.js.org/api/configureStore)
  * [`getDefaultMiddleware`](https://redux-toolkit.js.org/api/getDefaultMiddleware)
  * [`createReducer`](https://redux-toolkit.js.org/api/createReducer)
  * [`createAction`](https://redux-toolkit.js.org/api/createAction)
  * [`createSlice`](https://redux-toolkit.js.org/api/createSlice)
  * [`createSelector`](https://redux-toolkit.js.org/api/createSelector)
  * [Other Exports](https://redux-toolkit.js.org/api/other-exports)

Previous

« compose

* [What is Redux Toolkit?](#what-is-redux-toolkit)
  * [Installation](#installation)
* [Purpose](#purpose)
* [Why You Should Use Redux Toolkit](#why-you-should-use-redux-toolkit)
* [What's Included](#whats-included)
* [Documentation](#documentation)
  * [Documentation Links](#documentation-links)

**Docs**

* [Getting Started](https://redux.js.org/introduction/getting-started)
* [Tutorial](https://redux.js.org/tutorials/essentials/part-1-overview-concepts)
* [FAQ](https://redux.js.org/faq)
* [API Reference](https://redux.js.org/api/api-reference)

**Community**

* [Reactiflux Discord](https://discord.gg/0ZcbPKXt5bZ6au5t)
* [Stack Overflow](http://stackoverflow.com/questions/tagged/redux)
* [Feedback](https://redux.js.org/introduction/getting-started#help-and-discussion)

**More**

* [GitHub](https://github.com/reduxjs/redux)
* [![Deploys by Netlify](https://www.netlify.com/img/global/badges/netlify-color-accent.svg)](https://www.netlify.com/)

[![Redux Logo](https://d33wubrfki0l68.cloudfront.net/0834d0215db51e91525a25acf97433051f280f2f/c30f5/img/redux.svg)![Redux Logo](https://d33wubrfki0l68.cloudfront.net/0834d0215db51e91525a25acf97433051f280f2f/c30f5/img/redux.svg)](https://redux.js.org/)

Copyright © 2015–2021 Dan Abramov and the Redux documentation authors.
