Les bases de Remix PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Les bases du remix

Vous avez probablement entendu beaucoup de battage médiatique autour de l'un des nouveaux enfants du bloc framework, Remix. Il peut être surprenant qu'il ait fait ses débuts en 2019, mais il n'était à l'origine disponible qu'en tant que cadre premium basé sur un abonnement. En 2021, les fondateurs ont levé des fonds de démarrage et ouvert le framework pour permettre aux utilisateurs de commencer à utiliser Remix gratuitement. Les vannes se sont ouvertes et tout le monde semble en parler, bon ou mauvais. Plongeons-nous et regardons quelques-unes des bases de Remix.

Remix est un premier framework JavaScript de serveur "edge". Il utilise React, au moins pour l'instant, pour le front-end et donne la priorité au rendu côté serveur de l'application sur le bord. Les plates-formes peuvent prendre le code côté serveur et l'exécuter comme fonctions sans serveur ou en périphérie le rendant moins cher qu'un serveur traditionnel et le rapprochant de vos utilisateurs. Les fondateurs de Remix aiment l'appeler un framework "center stack" car il adapte les requêtes et les réponses faites entre le serveur et le client pour la plate-forme sur laquelle il est exécuté.

Les bases du remix

Déployer Remix

Parce que Remix nécessite un serveur, parlons de la façon dont vous pouvez le déployer. Remix ne fournit pas le serveur lui-même - vous apportez le serveur - lui permettant d'être exécuté dans n'importe quel Node.js or Deno l'environnement, y compris Netlifier Edge ainsi que Plate-forme d'applications de DigitalOcean. Remix lui-même est un compilateur, un programme qui traduit les requêtes pour la plate-forme sur laquelle il s'exécute. Ce procédé utilise construire pour créer des gestionnaires pour les requêtes au serveur. Les gestionnaires HTTP qu'il utilise sont construits sur le API de récupération Web et sont exécutés sur le serveur par s'adapter pour la plate-forme sur laquelle ils seront déployés.

Piles de remix

Les piles de remix sont des projets qui ont des outils communs qui sont préconfigurés pour vous. Il y a trois piles officielles qui sont maintenus par l'équipe Remix et ils portent tous le nom de genres musicaux. Il existe également un certain nombre de piles de remix communautaires, y compris le Pile de K-Pop créé par l'équipe de modèles de Netlify. Cette pile est une centrale électrique et comprend un Supbase base de données et authentification, Tailwind pour le style, Cyprès tests de bout en bout, Plus jolie formatage du code, ESLint peluches, et Manuscrit typage statique. Consultez le post de Tara Manicsic sur le déploiement de la pile K-Pop.

Mise en cache des itinéraires

Même si Remix nécessite un serveur, il peut toujours profiter de la pile de confiture avantages par la mise en cache des routes. Un site statique ou génération de site statique (SSG) se produit lorsque tout votre contenu est rendu au moment de la construction et reste statique jusqu'à une autre reconstruction. Le contenu est pré-généré et peut être mis sur un CDN. Cela offre de nombreux avantages et des chargements de site rapides pour l'utilisateur final. Cependant, Remix ne fait pas de SSG typique comme d'autres frameworks React populaires, y compris Next.js et Gatsby. Pour profiter de certains des avantages de SSG, vous pouvez utiliser le En-tête HTTP Cache-Control dans un remix fonction d'en-tête pour mettre en cache une route particulière ou directement dans le root.tsx fichier.

[[headers]]
  for = "/build/*"
  [headers.values]
    "Cache-Control" = "public, max-age=31536000, s-maxage=31536000"

Ajoutez ensuite votre fonction d'en-tête Où vous le voulez. Cela met en cache pendant une heure :

export function headers() {
  return {
    "Cache-Control": "public, s-maxage=360",
  };
};

Routage de remixage

De nombreux frameworks se sont penchés sur le routage basé sur les systèmes de fichiers. Il s'agit d'une technique dans laquelle un dossier désigné est utilisé pour définir des itinéraires pour votre application. Ils ont généralement une syntaxe spéciale pour déclarer des routes dynamiques et des points de terminaison. La plus grande différence actuellement entre Remix et d'autres frameworks populaires est la possibilité d'utiliser routage imbriqué.

Chaque application Remix commence par le root.tsx dossier. C'est là que toute la base de l'application est rendue. Vous trouverez ici une partie de la mise en page HTML courante, comme le <html> tag, le <head> balise, puis la <body> tag avec les composants nécessaires pour rendre l'application. La seule chose à souligner ici est la <Scripts> le composant est ce qui active JavaScript sur le site ; certaines choses fonctionneront sans cela, mais pas tout. La root.tsx le fichier agit comme une mise en page parent pour tout ce qui se trouve à l'intérieur du routes répertoire, tout dans les routes est rendu là où le <Outlet/> le composant est dans root.tsx. C'est la base du routage imbriqué dans Remix.

Routage imbriqué

Non seulement Remix a été fondé par une partie de l'équipe de Routeur React, ça aussi Usages Routeur de réaction. En fait, ils sont ramener certaines des bonnes choses à propos de Remix à React Router. Un problème complexe que les mainteneurs de Next.js et SvelteKit tentent de résoudre en ce moment est le routage imbriqué.

Le routage imbriqué est différent du routage traditionnel. Là où un nouvel itinéraire conduirait un utilisateur vers une nouvelle page, chaque itinéraire imbriqué est une section distincte de la même page. Il permet de séparer les préoccupations en gardant la logique métier associée uniquement aux fichiers qui en ont besoin. Remix est capable de gérer les erreurs localisées uniquement dans la section de la page où se trouve la route imbriquée. Les autres itinéraires de la page sont toujours utilisables et l'itinéraire qui s'est rompu peut fournir un contexte pertinent à l'erreur sans que la page entière ne se bloque.

Remix le fait lorsqu'un fichier racine dans app/routes porte le même nom qu'un répertoire de fichiers qui se chargeront à l'intérieur du fichier de base. Le fichier racine devient un disposition pour les fichiers du répertoire à l'aide d'un <Outlet /> composant pour indiquer à Remix où charger les autres routes.

Composant de sortie

La <Outlet /> Le composant est un signal à Remix pour savoir où il doit rendre le contenu des itinéraires imbriqués. Il est placé dans le fichier à la racine du app/routes répertoire portant le même nom que les routes imbriquées. Le code suivant va dans un app/routes/about.tsx fichier et comprend la sortie pour les fichiers à l'intérieur app/routes/about dossier:

import { Outlet } from "@remix-run/react";

export default function About() {
  return (
    <>
      <section>
        I am the parent layout. I will be on any page inside of my named directory.
      </section>
      { /* All of my children, the files in the named directory, will go here. */ }
      <Outlet />
    </>
  )
}

Structure du dossier

Tout fichier dans le app/routes/ répertoire devient une route à l'URL de son nom. Un répertoire peut également être ajouté avec un index.tsx fichier.

app/
├── routes/
│   │
│   └── blog
|   |   ├── index.tsx ## The /blog route
│   └── about.tsx  ## The /about route
│   ├── index.tsx  ## The / or home route
└── root.tsx

Si une route a le même nom qu'un répertoire, le fichier nommé devient un fichier de mise en page pour les fichiers à l'intérieur du répertoire et le fichier de mise en page a besoin d'un Composant de sortie pour y placer la route imbriquée.

app/
├── routes/
│   │
│   └── about
│   │   ├── index.tsx
│   ├── about.tsx ## this is a layout for /about/index.tsx
│   ├── index.tsx
└── root.tsx

Les mises en page peuvent également être créées en les préfixant d'un double trait de soulignement (__).

app/
├── routes/
│   │
│   └── about
│   │   ├── index.tsx
│   ├── index.tsx
│   ├── about.tsx
│   ├── __blog.tsx ## this is also a layout
└── root.tsx

https://your-url.com/about rendra encore le app/routes/about.tsx fichier, mais rendra également tout ce qui se trouve dans app/routes/about/index.tsx où le Composant de sortie est dans le balisage de app/routes/about.tsx.

Itinéraires dynamiques

Une route dynamique est une route qui change en fonction des informations contenues dans l'url. Il peut s'agir du nom d'un article de blog ou d'un identifiant client, mais peu importe de quoi il s'agit, $ La syntaxe ajoutée au début de la route signale à Remix qu'elle est dynamique. Le nom n'a pas d'importance autre que le $ préfixe.

app/
├── routes/
│   │
│   └── about
│   │   ├── $id.tsx
│   │   ├── index.tsx
│   ├── about.tsx ## this is a layout for /about/index.tsx
│   ├── index.tsx
└── root.tsx

Récupérez ces données !

Étant donné que Remix rend toutes ses données sur le serveur, vous ne voyez pas beaucoup de choses qui sont devenues la norme d'une application React, comme useState() ainsi que useEffect() crochets, dans Remix. L'état côté client est moins nécessaire car il a déjà été évalué sur le serveur.

Peu importe également le type de serveur que vous utilisez pour récupérer les données. Étant donné que Remix se situe entre la requête et la réponse et la traduit de manière appropriée, vous pouvez utiliser la norme API de récupération Web. Remix le fait dans un loader fonction qui uniquement s'exécute sur le serveur et utilise le useLoaderData() crochet pour restituer les données dans le composant. Voici un exemple utilisant le Chat en tant qu'API de service pour rendre une image de chat aléatoire.

import { Outlet, useLoaderData } from '@remix-run/react'

export async function loader() {
  const response = await fetch('<https://cataas.com/cat?json=true>')
  const data = await response.json()
  return {
    data
  }
}

export default function AboutLayout() {
  const cat = useLoaderData<typeof loader>()
  return (
    <>
      <img
        src={`https://cataas.com/cat/${cat}`}
        alt="A random cat."
      />
      <Outlet />
    </>
  )
}

Paramètres d'itinéraire

Dans les routes dynamiques, les routes précédées de $ doivent pouvoir accéder au paramètre URL pour gérer les données qui doivent être rendues. La loader la fonction y a accès via un params argument.

import { useLoaderData } from '@remix-run/react'
import type { LoaderArgs } from '@remix-run/node'

export async function loader({ params }: LoaderArgs) {
  return {
      params
  }
}

export default function AboutLayout() {
  const { params } = useLoaderData<typeof loader>()
  return <p>The url parameter is {params.tag}.</p>
}

Autres fonctions Remix

Remix a quelques autres fonctions d'assistance qui ajoutent des fonctionnalités supplémentaires aux éléments et attributs HTML normaux dans le API du module de routage. Chaque route peut définir ses propres types de fonctions.

Fonction action

An action La fonction vous permet d'ajouter des fonctionnalités supplémentaires à une action de formulaire en utilisant le Web standard API FormData.

export async function action({ request }) {
  const body = await request.formData();
  const todo = await fakeCreateTodo({
      title: body.get("title"),
  });
  return redirect(`/todos/${todo.id}`);
}

Fonction d'en-tête

Toutes En-têtes standard HTTP peut aller dans un headers fonction. Étant donné que chaque route peut avoir un en-tête, pour éviter les conflits avec les routes imbriquées, la route la plus profonde — ou l'URL avec le plus de barres obliques (/) — gagne. Vous pouvez également faire passer les en-têtes, actionHeaders, loaderHeadersou parentHeaders

export function headers({
  actionHeaders,
  loaderHeaders,
  parentHeaders,
}) {
  return {
"Cache-Control": loaderHeaders.get("Cache-Control"),
  };
}

Fonction méta

Cette fonction définira les balises META du document HTML. L'un est placé dans le root.tsx fichier par défaut, mais ils peuvent être mis à jour pour chaque route.

export function meta() {
  return {
    title: "Your page title",
    description: "A new description for each route.",
  };
};

HTML link les éléments vivent dans <head> balise d'un document HTML et ils importent du CSS, entre autres. La links fonction, à ne pas confondre avec la <Link /> composant, vous permet d'importer uniquement des éléments dans les itinéraires qui en ont besoin. Ainsi, par exemple, les fichiers CSS peuvent être délimités et importés uniquement sur les routes qui ont besoin de ces fichiers spécifiques. La link les éléments sont renvoyés d'un links() fonctionnent comme un tableau d'objets et peuvent être soit un HtmlLinkDescriptor du link API ou PageLinkDescriptor qui peut préextraire les données d'une page.

export function links() {
  return [
    // add a favicon
    {
      rel: "icon",
      href: "/favicon.png",
      type: "image/png",
    },
    // add an external stylesheet
    {
      rel: "stylesheet",
      href: "<https://example.com/some/styles.css>",
      crossOrigin: "true",
    },
    // add a local stylesheet,
    { rel: "stylesheet", href: stylesHref },

    // prefetch a page's data
    { page: "/about/community" }
  ]
}

Liaison entre les itinéraires

Remix fournit un composant pour aller entre les différentes routes de votre application appelée <Link/>. Pour obtenir le routage côté client, utilisez le <Link to="">Name</Link> composant au lieu de <a href="">Name</a>L’ <Link /> le composant prend également un accessoire de prefetch avec accepte none par défaut, intent pour prérécupérer les données si Remix détecte que l'utilisateur survole ou concentre le lien, ou render qui récupérera les données de la route dès que le lien sera rendu.

import { Link } from "@remix-run/react";

export default function Nav() {
  return (
    <nav>
      <Link to="/">Home</Link>{" "}
      <Link to="/about">About</Link>{" "}
      <Link to="/about/community" prefetch="intent">Community</Link>
    </nav>
  );
}

Prochaines étapes

Vous connaissez maintenant les bases de Remix et vous êtes prêt à commencer à créer des applications, n'est-ce pas ? Remix fournit une Application de blagues et Tutoriel du blog pour commencer à mettre en œuvre ces connaissances de base. Vous pouvez également repartir de zéro et créer une toute nouvelle application Remix. Ou si vous êtes prêt à plonger, donnez le Pile de K-Pop un essai. J'ai vraiment apprécié mon temps avec Remix et j'aime l'accent mis sur les normes Web et le ramener à l'essentiel. C'est maintenant à vous de commencer à créer !

Horodatage:

Plus de Astuces CSS