1. Preface
    1. Conventions Used in This Book
    2. Using Code Examples
    3. O’Reilly Online Learning
    4. How to Contact Us
    5. Acknowledgments
  2. 1. Creating Applications
    1. Generate a Simple Application
      1. Problem
      2. Solution
      3. Discussion
    2. Build Content-Rich Apps with Gatsby
      1. Problem
      2. Solution
      3. Discussion
    3. Build Universal Apps with Razzle
      1. Problem
      2. Solution
      3. Discussion
    4. Manage Server and Client Code with Next.js
      1. Problem
      2. Solution
      3. Discussion
    5. Create a Tiny App with Preact
      1. Problem
      2. Solution
      3. Discussion
    6. Build Libraries with nwb
      1. Problem
      2. Solution
      3. Discussion
    7. Add React to Rails with Webpacker
      1. Problem
      2. Solution
      3. Discussion
    8. Create Custom Elements with Preact
      1. Problem
      2. Solution
      3. Discussion
    9. Use Storybook for Component Development
      1. Problem
      2. Solution
      3. Discussion
    10. Test Your Code in a Browser with Cypress
      1. Problem
      2. Solution
      3. Discussion
  3. 2. Routing
    1. Create Interfaces with Responsive Routes
      1. Problem
      2. Solution
      3. Discussion
    2. Move State into Routes
      1. Problem
      2. Solution
      3. Discussion
    3. Use MemoryRouter for Unit Testing
      1. Problem
      2. Solution
      3. Discussion
    4. Use Prompt for Page Exit Confirmations
      1. Problem
      2. Solution
      3. Discussion
    5. Create Transitions with React Transition Group
      1. Problem
      2. Solution
      3. Discussion
    6. Create Secured Routes
      1. Problem
      2. Solution
      3. Discussion
  4. 3. Managing State
    1. Use Reducers to Manage Complex State
      1. Problem
      2. Solution
      3. Discussion
    2. Create an Undo Feature
      1. Problem
      2. Solution
      3. Discussion
    3. Create and Validate Forms
      1. Problem
      2. Solution
      3. Discussion
    4. Measure Time with a Clock
      1. Problem
      2. Solution
      3. Discussion
    5. Monitor Online Status
      1. Problem
      2. Solution
      3. Discussion
    6. Manage Global State with Redux
      1. Problem
      2. Solution
      3. Discussion
    7. Survive Page Reloads with Redux Persist
      1. Problem
      2. Solution
      3. Discussion
    8. Calculate Derived State with Reselect
      1. Problem
      2. Solution
      3. Discussion
  5. 4. Interaction Design
    1. Build a Centralized Error Handler
      1. Problem
      2. Solution
      3. Discussion
    2. Create an Interactive Help Guide
      1. Problem
      2. Solution
      3. Discussion
    3. Use Reducers for Complex Interactions
      1. Problem
      2. Solution
      3. Discussion
    4. Add Keyboard Interaction
      1. Problem
      2. Solution
      3. Discussion
    5. Use Markdown for Rich Content
      1. Problem
      2. Solution
      3. Discussion
    6. Animate with CSS Classes
      1. Problem
      2. Solution
      3. Discussion
    7. Animate with React Animation
      1. Problem
      2. Solution
      3. Discussion
    8. Animate Infographics with TweenOne
      1. Problem
      2. Solution
      3. Discussion
  6. 5. Connecting to Services
    1. Convert Network Calls to Hooks
      1. Problem
      2. Solution
      3. Discussion
    2. Refresh Automatically with State Counters
      1. Problem
      2. Solution
      3. Discussion
    3. Cancel Network Requests with Tokens
      1. Problem
      2. Solution
      3. Discussion
    4. Make Network Calls with Redux Middleware
      1. Problem
      2. Solution
      3. Discussion
    5. Connect to GraphQL
      1. Problem
      2. Solution
      3. Discussion
    6. Reduce Network Load with Debounced Requests
      1. Problem
      2. Solution
      3. Discussion
  7. 6. Component Libraries
    1. Use Material Design with Material-UI
      1. Problem
      2. Solution
      3. Discussion
    2. Create a Simple UI with React Bootstrap
      1. Problem
      2. Solution
      3. Discussion
    3. View Data Sets with React Window
      1. Problem
      2. Solution
      3. Discussion
    4. Create Responsive Dialogs with Material-UI
      1. Problem
      2. Solution
      3. Discussion
    5. Build an Admin Console with React Admin
      1. Problem
      2. Solution
      3. Discussion
    6. No Designer? Use Semantic UI
      1. Problem
      2. Solution
      3. Discussion
  8. 7. Security
    1. Secure Requests, Not Routes
      1. Problem
      2. Solution
      3. Discussion
    2. Authenticate with Physical Tokens
      1. Problem
      2. Solution
      3. Discussion
    3. Enable HTTPS
      1. Problem
      2. Solution
      3. Discussion
    4. Authenticate with Fingerprints
      1. Problem
      2. Solution
      3. Discussion
    5. Use Confirmation Logins
      1. Problem
      2. Solution
      3. Discussion
    6. Use Single-Factor Authentication
      1. Problem
      2. Solution
      3. Discussion
    7. Test on an Android Device
      1. Problem
      2. Solution
      3. Discussion
    8. Check Security with ESlint
      1. Problem
      2. Solution
      3. Discussion
    9. Make Login Forms Browser Friendly
      1. Problem
      2. Solution
      3. Discussion
  9. 8. Testing
    1. Use the React Testing Library
      1. Problem
      2. Solution
      3. Discussion
    2. Use Storybook for Render Tests
      1. Problem
      2. Solution
      3. Discussion
    3. Test Without a Server Using Cypress
      1. Problem
      2. Solution
      3. Discussion
    4. Use Cypress for Offline Testing
      1. Problem
      2. Solution
      3. Discussion
    5. Test in a Browser with Selenium
      1. Problem
      2. Solution
      3. Discussion
    6. Test Cross-Browser Visuals with ImageMagick
      1. Problem
      2. Solution
      3. Discussion
    7. Add a Console to Mobile Browsers
      1. Problem
      2. Solution
      3. Discussion
    8. Remove Randomness from Tests
      1. Problem
      2. Solution
      3. Discussion
    9. Time Travel
      1. Problem
      2. Solution
      3. Discussion
  10. 9. Accessibility
    1. Use Landmarks
      1. Problem
      2. Solution
      3. Discussion
    2. Apply Roles, Alts, and Titles
      1. Problem
      2. Solution
      3. Discussion
    3. Check Accessibility with ESlint
      1. Problem
      2. Solution
      3. Discussion
    4. Use Axe DevTools at Runtime
      1. Problem
      2. Solution
      3. Discussion
    5. Automate Browser Testing with Cypress Axe
      1. Problem
      2. Solution
      3. Discussion
    6. Add Skip Buttons
      1. Problem
      2. Solution
      3. Discussion
    7. Add Skip Regions
      1. Problem
      2. Solution
      3. Discussion
    8. Capture Scope in Modals
      1. Problem
      2. Solution
      3. Discussion
    9. Create a Page Reader with the Speech API
      1. Problem
      2. Solution
      3. Discussion
  11. 10. Performance
    1. Use Browser Performance Tools
      1. Problem
      2. Solution
      3. Discussion
    2. Track Rendering with Profiler
      1. Problem
      2. Solution
      3. Discussion
    3. Create Profiler Unit Tests
      1. Problem
      2. Solution
      3. Discussion
    4. Measure Time Precisely
      1. Problem
      2. Solution
      3. Discussion
    5. Shrink Your App with Code Splitting
      1. Problem
      2. Solution
      3. Discussion
    6. Combine Network Promises
      1. Problem
      2. Solution
      3. Discussion
    7. Use Server-Side Rendering
      1. Problem
      2. Solution
      3. Discussion
    8. Use Web Vitals
      1. Problem
      2. Solution
      3. Discussion
  12. 11. Progressive Web Applications
    1. Create Service Workers with Workbox
      1. Problem
      2. Solution
      3. Discussion
    2. Build a PWA with Create React App
      1. Problem
      2. Solution
      3. Discussion
    3. Cache Third-Party Resources
      1. Problem
      2. Solution
      3. Discussion
    4. Automatically Reload Workers
      1. Problem
      2. Solution
      3. Discussion
    5. Add Notifications
      1. Problem
      2. Solution
      3. Discussion
    6. Make Offline Changes with Background Sync
      1. Problem
      2. Solution
      3. Discussion
    7. Add a Custom Installation UI
      1. Problem
      2. Solution
      3. Discussion
    8. Provide Offline Responses
      1. Problem
      2. Solution
      3. Discussion
  13. Index