An open API service indexing awesome lists of open source software.

https://github.com/dantrain/remix-relay

Integration between the React Router v7 framework and the Relay GraphQL client
https://github.com/dantrain/remix-relay

react react-router relay remix

Last synced: 2 months ago
JSON representation

Integration between the React Router v7 framework and the Relay GraphQL client

Awesome Lists containing this project

README

          





remix-relay logo

remix-relay

NPM Version
NPM Version

A small library providing integration between the [React Router v7](https://reactrouter.com/) framework (formerly [Remix](https://remix.run/)) and the [Relay](https://relay.dev/) GraphQL client, enabling streaming with the `@defer` directive.

## What does it look like?

Movie app screenshot

```typescript
const query = graphql`
query MovieQuery($slug: String!) {
movie(slug: $slug) {
title
...MovieDetailFragment
...MovieReviewsListFragment @defer
}
}
`;

export const meta = metaQuery(({ data }) => [
{ title: `${data.movie.title} - Movie App` },
]);

export const loader = (args: Route.LoaderArgs) =>
loaderQuery(args, query, args.params);

export const clientLoader = (args: Route.ClientLoaderArgs) =>
clientLoaderQuery(query, args.params);

export default function Movie() {
const [data] = useLoaderQuery(query);

return (


}>



);
}
```

## Docs

- [Getting started guide](docs/getting-started.md)
- [What about actions and fetchers?](docs/what-about-actions-and-fetchers.md)

## Examples

| [Movie app](https://dans-movie-app.dantrain.workers.dev/) | [Counter app](https://dans-counter-app.fly.dev/) | [Trellix](https://trellix-relay.fly.dev/) |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------: |
| [Movie app](https://dans-movie-app.dantrain.workers.dev/) | [Counter app](https://dans-counter-app.fly.dev/) | [Trellix](https://trellix-relay.fly.dev/) |

## Sequence diagrams

### Relay SPA (no @defer)

```mermaid
sequenceDiagram
Browser->>+Server: GET /
Server-->>-Browser: Document
Note over Browser: First paint
Browser->>+Server: GET /assets/bundle.js
Server-->>-Browser: bundle.js
Browser->>Browser: Render suspense fallback
Browser->>+Server: POST /graphql
Server->>+DB: Get Movie
DB-->>-Server: Movie data
Server->>+DB: Get Reviews
DB-->>-Server: Reviews data
Server-->>-Browser: Data
Browser->>Browser: Render complete page
Note over Browser: First meaningful paint
Note over Browser: Done
```

### remix-relay (no @defer)

```mermaid
sequenceDiagram
Browser->>+Server: GET /
Server->>+DB: Get Movie
DB-->>-Server: Movie data
Server->>+DB: Get Reviews
DB-->>-Server: Reviews data
Server->>Server: Render complete page
Server-->>-Browser: Document
Note over Browser: First meaningful paint
Browser->>+Server: GET /assets/bundle.js
Server-->>-Browser: bundle.js
Browser->>Browser: Rehydrate
Note over Browser: Interactive
Note over Browser: Done
```

### remix-relay (with @defer)

```mermaid
sequenceDiagram
Browser->>+Server: GET /
Server->>+DB: Get Movie
DB-->>-Server: Movie data
Server->>+DB: Get Reviews
Server->>Server: Render Movie details
Server-->>Browser: Chunk 1
Note over Browser: First meaningful paint
Browser->>+Server: GET /assets/bundle.js
Server-->>-Browser: bundle.js
Browser->>Browser: Rehydrate
Note over Browser: Interactive
DB-->>-Server: Reviews data
Server-->>-Browser: Chunk 2
Browser->>Browser: Render complete page
Note over Browser: Done
```