- Simplifying the Arrow Functions
- Supplying the Initial State
- Persisting the State to the Local Storage
- Refactoring the Entry Point
- Adding React Router to the project
- Navigating with React Router
- Filtering Redux State with React Router Params
- Using withRouter() to Inject the Params into Connected Components
- Using mapDispatchToProps() Shorthand Notation
- Colocating Selectors with reducers
- Normalizing the State Shape
- Wrapping dispatch() to Log Actions
- Adding a Fake Backend to the Project
- Fetching Data on Route Change
- Dispatching Actions with the Fetched Data
- Wrapping dispatch() to Recognize Promises
- The Middleware chain
- Applying Redux Middleware
- Updating the State with the Fetched Data
- Refactoring the reducers
- Displaying Loading Indicators
- Dispatching Actions Asynchronously with Thunks
- Avoiding Race Conditions with Thunks
- Displaying Error Messages
- Creating Data on the Server
- Normalizing API Responses with normalizr
- Updating Data on the Server