What this book covers
Chapter 1, The Era of Full Stack Web Frameworks, introduces Remix as a full stack web framework and highlights the advantages Remix provides you as a React developer. The chapter further discusses Remix’s philosophy and establishes the mental model of primitives, conventions, and levers. Finally, the chapter explains how Remix works under the hood.
Chapter 2, Creating a New Remix App, kicks off your Remix development journey. The chapter guides you through creating a new Remix application using Remix’s create-remix
CLI script. The chapter also provides an overview of Remix’s file and folder structure and Remix’s two environments – the client and the server. Finally, the chapter offers a troubleshooting guide for Remix projects.
Chapter 3, Deployment Target, Adapters, and Stacks, offers an overview of Remix’s different deployment targets and discusses considerations to select the right target for your application. The chapter further details how to switch between adapters and how to use Remix Stacks to use an existing application template. Finally, the chapter introduces you to BeeRich, the demo application of this book.
Chapter 4, Routing in Remix, reviews Remix’s file-based routing convention. The chapter guides you through creating standalone pages, nested routes, parameterized routes, pathless layout routes, and other routing concepts. The chapter also discusses page navigations in Remix.
Chapter 5, Fetching and Mutating Data, dives deep into data fetching and mutations with Remix. The chapter documents Remix’s request-response life cycle and provides detailed practices to work with Remix’s server-side loader
and action
functions. The chapter also explains Remix’s built-in data revalidation.
Chapter 6, Enhancing the User Experience, formalizes how progressive enhancement works in Remix. The chapter then focuses on advanced data fetching and mutation concepts, such as prefetching and handling concurrent mutations.
Chapter 7, Error Handling in Remix, provides an overview of handling expected and unexpected errors in Remix to develop resilient user experiences.
Chapter 8, Session Management, guides you through implementing a search feature and a login and signup flow in BeeRich. The chapter provides a practical deep dive into managing UI and session state, using web standards and Remix’s primitives.
Chapter 9, Assets and Metadata Handling, focuses on meta tags and static assets in Remix. The chapter includes practices to expose static assets and work with custom fonts. Finally, the chapter discusses how to manage images with Remix.
Chapter 10, Working with File Uploads, introduces you to Remix’s file upload helpers. The chapter guides you through the implementation of uploading user files in BeeRich and emphasizes limiting access to the uploaded files to authorized users only.
Chapter 11, Optimistic UI, discusses the trade-offs of the optimistic UI. The chapter further lets you work with optimistic UI in BeeRich using Remix’s primitives. Finally, the chapter highlights how Remix eases the implementation of optimistic UI through its primitives and built-in data revalidation.
Chapter 12, Caching Strategies, provides an overview of different caching strategies to improve the performance of a Remix application. First, the chapter reviews different HTTP caching strategies before discussing in-memory caching. The chapter offers practical examples using the BeeRich demo application.
Chapter 13, Deferring Loader Data, introduces you to Remix’s concept of deferring loader data. The chapter further explains HTML streaming and motivates its usage and use cases to use streaming to defer data requests.
Chapter 14, Real-Time with Remix, examines popular real-time technologies and allows you to implement real-time data updates in BeeRich, using a Remix resource route and Server-Sent Events.
Chapter 15, Advanced Session Management, explores additional session and UI state management use cases. The chapter provides an overview of Remix’s cookie helper primitives compared to its session helpers. The chapter further guides you through the implementation of pagination in BeeRich.
Chapter 16, Developing for the Edge, defines the term edge in detail and considers the advantages and disadvantages of deploying Remix applications to an edge environment.
Chapter 17, Migration and Upgrade Strategies, wraps up the learning journey of this book and offers an overview of different strategies to migrate to Remix. The chapter also explains Remix’s future flags and how they can be used to ease major version upgrades.