Now that we have defined the state of our application, we also need a way to change the state. In Redux, we never modify the state directly. To ensure that the application is predictable, only actions can change the state. Redux actions are simply JavaScript objects, with a type property that specifies the name of the action. Let's say we want to create a new post in our blog, we could use an action like this:
{ type: 'CREATE_POST', user: 'dan', text: 'New post' }
Later on, we could define another action for setting the filter:
{ type: 'SET_FILTER', filter: 'hello' }
These action objects can be passed to Redux, resulting in a new state being calculated from the current state and the action. This process is called dispatching an action.
The way state changes are processed in Redux makes them very explicit, clear, and predictable. If you want to find out how a certain state change happened, just look at the action that was dispatched. Furthermore, you can reproduce state changes by reverting and redispatching actions (also known as time traveling).