Gatsby: Variables dans Markdown?

Créé le 28 nov. 2018  ·  1Commentaire  ·  Source: gatsbyjs/gatsby

Sommaire

Existe-t-il un moyen d'avoir des variables dans les pages de démarque qui seront remplacées par des valeurs? J'écris de la documentation sur un service qui en tant qu'URL. L'URL est dans quelques fichiers de démarque et j'aimerais ne pas avoir à trouver et à remplacer en cas de changement.

Ma meilleure option est-elle d'ajouter un composant personnalisé dans Markdown? Cela semble dur pour cela.

question or discussion

Commentaire le plus utile

Vous pouvez écrire un petit assistant personnalisé pour cela (ou utiliser quelque chose comme lodash.template https://lodash.com/docs/4.17.11#template)

Voici une solution rapide et sale:

Étant donné un fichier de démarque sample.md avec le contenu suivant:

---
title: Sample
---

## Hello World

This is a [link](%URL%/sub-path), and so is [this](%URL%/sub-path)

Vous pouvez créer un fichier (appelons-le src/utils/template.js ) et écrire quelque chose comme ça

export default function template(content, data) {
  return content.replace(/%(.+)%/g, (match, key) => {
    const value = data[key]
    if (typeof value !== 'undefined') {
      return value
    }
    return match // guards against some unintentional prefix
  });
}

Maintenant, connectez tout cela ensemble, il vous suffira d'utiliser cette fonction de modèle pour remplacer votre contenu. L'objet data peut être ce que vous voulez et peut être extrait de n'importe où (par exemple graphql, un fichier de constantes, des variables d'environnement, etc.).

import React from 'react'

import template from '../utils/template';

const URL = 'https://google.com'; // this can be from wherever

export default function SomeMarkdownPage({ data }) {
  // data is from GraphQL, presume the parent is data.markdown
  return (
    <div dangerouslySetInnerHTML={{
      __html: template(data.markdown.html, {
        URL
      })
    }} />
  )
}

Est-ce que ça a du sens? Cela pourrait également être un plugin gatsby-remarque- assez utile, mais je ne suis pas sûr qu'il existe! Si vous avez le moindre intérêt à écrire cela, ce serait cool, mais pour l'instant, cela fonctionnera certainement pour votre cas d'utilisation!

Je vais fermer cette réponse, mais n'hésitez pas à rouvrir si l'un de nous peut vous aider davantage. Merci d'utiliser Gatsby!

>Tous les commentaires

Vous pouvez écrire un petit assistant personnalisé pour cela (ou utiliser quelque chose comme lodash.template https://lodash.com/docs/4.17.11#template)

Voici une solution rapide et sale:

Étant donné un fichier de démarque sample.md avec le contenu suivant:

---
title: Sample
---

## Hello World

This is a [link](%URL%/sub-path), and so is [this](%URL%/sub-path)

Vous pouvez créer un fichier (appelons-le src/utils/template.js ) et écrire quelque chose comme ça

export default function template(content, data) {
  return content.replace(/%(.+)%/g, (match, key) => {
    const value = data[key]
    if (typeof value !== 'undefined') {
      return value
    }
    return match // guards against some unintentional prefix
  });
}

Maintenant, connectez tout cela ensemble, il vous suffira d'utiliser cette fonction de modèle pour remplacer votre contenu. L'objet data peut être ce que vous voulez et peut être extrait de n'importe où (par exemple graphql, un fichier de constantes, des variables d'environnement, etc.).

import React from 'react'

import template from '../utils/template';

const URL = 'https://google.com'; // this can be from wherever

export default function SomeMarkdownPage({ data }) {
  // data is from GraphQL, presume the parent is data.markdown
  return (
    <div dangerouslySetInnerHTML={{
      __html: template(data.markdown.html, {
        URL
      })
    }} />
  )
}

Est-ce que ça a du sens? Cela pourrait également être un plugin gatsby-remarque- assez utile, mais je ne suis pas sûr qu'il existe! Si vous avez le moindre intérêt à écrire cela, ce serait cool, mais pour l'instant, cela fonctionnera certainement pour votre cas d'utilisation!

Je vais fermer cette réponse, mais n'hésitez pas à rouvrir si l'un de nous peut vous aider davantage. Merci d'utiliser Gatsby!

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

Oppenheimer1 picture Oppenheimer1  ·  3Commentaires

andykais picture andykais  ·  3Commentaires

benstr picture benstr  ·  3Commentaires

dustinhorton picture dustinhorton  ·  3Commentaires

jimfilippou picture jimfilippou  ·  3Commentaires