Skip to main content

Core Concepts Redux

frontend redux

Core Concepts | Redux

Excerptโ€‹

Introduction > Core Concepts: A quick overview of Redux's key idea, reducer functions


Imagine your appโ€™s state is described as a plain object. For example, the state of a app might look like this:

This object is like a โ€œmodelโ€ except that there are no setters. This is so that different parts of the code canโ€™t change the state arbitrarily, causing hard-to-reproduce bugs.

To change something in the state, you need to dispatch an action. An action is a plain JavaScript object (notice how we donโ€™t introduce any magic?) that describes what happened. Here are a few example actions:

Enforcing that every change is described as an action lets us have a clear understanding of whatโ€™s going on in the app. If something changed, we know why it changed. Actions are like breadcrumbs of what has happened. Finally, to tie state and actions together, we write a function called a reducer. Again, nothing magical about itโ€”itโ€™s just a function that takes state and action as arguments, and returns the next state of the app. It would be hard to write such a function for a big app, so we write smaller functions managing parts of the state:

And we write another reducer that manages the complete state of our app by calling those two reducers for the corresponding state keys:

This is basically the whole idea of Redux. Note that we havenโ€™t used any Redux APIs. It comes with a few utilities to facilitate this pattern, but the main idea is that you describe how your state is updated over time in response to action objects, and 90% of the code you write is just plain JavaScript, with no use of Redux itself, its APIs, or any magic.