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.
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!
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:Vous pouvez créer un fichier (appelons-le
src/utils/template.js
) et écrire quelque chose comme çaMaintenant, 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.).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!