Cette page est affichée en anglais. Une traduction française est en cours.
ConfigsMay 1, 2026·3 min de lecture

Relay — Declarative GraphQL Data Fetching for React

Relay is a JavaScript framework by Meta for building data-driven React applications powered by GraphQL. It handles data fetching, caching, and optimistic updates with a compiler-driven approach.

Introduction

Relay is a GraphQL client framework built by Meta (Facebook) that tightly integrates with React. It uses a compiler to analyze GraphQL fragments at build time, generating optimized queries and type-safe artifacts. This approach eliminates overfetching, enables automatic data consistency, and scales to applications with thousands of components.

What Relay Does

  • Co-locates GraphQL fragment declarations with the React components that use them
  • Compiles fragments at build time into optimized queries with deduplication
  • Maintains a normalized client-side cache that automatically updates across components
  • Supports pagination, refetching, and mutations with built-in hooks
  • Generates TypeScript or Flow types from GraphQL schemas for type safety

Architecture Overview

The Relay compiler reads GraphQL tagged template literals from source files, validates them against the schema, and generates query artifacts. At runtime, Relay's store holds a normalized graph of records keyed by ID and typename. When a mutation or subscription updates a record, every component observing that record re-renders. The compiler also splits queries across code-split boundaries, fetching data in parallel with component code.

Self-Hosting & Configuration

  • Add relay-compiler, babel-plugin-relay, and react-relay to your project
  • Point the compiler at your GraphQL schema via relay.config.js
  • Run relay-compiler --watch during development for continuous artifact generation
  • Configure the Relay Environment with your network layer (fetch function) and store
  • Works with any GraphQL server that supports the Relay cursor-based pagination spec

Key Features

  • Compiler-driven approach that catches GraphQL errors at build time, not runtime
  • Normalized store that ensures data consistency across the entire component tree
  • Automatic garbage collection of unreferenced data to bound memory usage
  • Built-in support for @defer, @stream, and live queries for real-time data
  • Declarative pagination via useFragment and usePaginationFragment hooks

Comparison with Similar Tools

  • Apollo Client — more flexible but relies on runtime query processing; Relay optimizes at compile time
  • urql — lightweight and extensible; Relay offers stronger guarantees for large-scale apps
  • TanStack Query — REST-first data fetching; Relay is purpose-built for GraphQL
  • SWR — generic data fetching hooks; Relay provides a normalized GraphQL-aware cache
  • Grafbase — managed GraphQL backend; Relay is a client-side framework

FAQ

Q: Does Relay require a specific GraphQL server? A: No, but your server should support the Relay connection spec (edges/nodes) for pagination and globally unique IDs for the normalized store.

Q: Is the Relay compiler fast? A: Yes. The compiler is written in Rust and processes large codebases incrementally in watch mode.

Q: Can I use Relay with TypeScript? A: Yes. The compiler generates TypeScript types for all fragments and queries.

Q: Is Relay used in production? A: Meta uses Relay across Facebook, Instagram, and other products serving billions of users.

Sources

Fil de discussion

Connectez-vous pour rejoindre la discussion.
Aucun commentaire pour l'instant. Soyez le premier à partager votre avis.

Actifs similaires