¿Hay alguna manera de tener variables en las páginas de rebajas que serán reemplazadas por valores? Estoy escribiendo documentación sobre un servicio que como URL. La URL está en un par de archivos de rebajas y me gustaría no tener que buscar y reemplazar en caso de que cambie.
¿Es mi mejor opción agregar un componente personalizado en Markdown? Parece una mano dura para esto.
Puede escribir un pequeño ayudante personalizado para esto (o usar algo como lodash.template
https://lodash.com/docs/4.17.11#template)
Aquí hay una solución rápida y sucia:
Dado un archivo de rebajas sample.md
con el siguiente contenido:
---
title: Sample
---
## Hello World
This is a [link](%URL%/sub-path), and so is [this](%URL%/sub-path)
Puede crear un archivo (llamémoslo src/utils/template.js
) y escribir algo como esto
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
});
}
Ahora conectando todo junto, solo necesitará _utilizar_ esta función de plantilla para reemplazar su contenido. El objeto data
puede ser lo que desee y puede extraerse de cualquier lugar (por ejemplo, graphql, algún archivo de constantes, variables de entorno, 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
})
}} />
)
}
¿Esto tiene sentido? Este también podría ser un complemento de gatsby-observación-bastante útil, ¡pero no estoy seguro de que exista! Si tiene algún interés en escribir eso, sería genial, pero por ahora, ¡esto ciertamente funcionará para su caso de uso!
Voy a cerrar esto como se respondió, pero no dude en volver a abrirlo si alguno de nosotros puede ayudar más. ¡Gracias por usar Gatsby!
Comentario más útil
Puede escribir un pequeño ayudante personalizado para esto (o usar algo como
lodash.template
https://lodash.com/docs/4.17.11#template)Aquí hay una solución rápida y sucia:
Dado un archivo de rebajas
sample.md
con el siguiente contenido:Puede crear un archivo (llamémoslo
src/utils/template.js
) y escribir algo como estoAhora conectando todo junto, solo necesitará _utilizar_ esta función de plantilla para reemplazar su contenido. El objeto
data
puede ser lo que desee y puede extraerse de cualquier lugar (por ejemplo, graphql, algún archivo de constantes, variables de entorno, etc.).¿Esto tiene sentido? Este también podría ser un complemento de gatsby-observación-bastante útil, ¡pero no estoy seguro de que exista! Si tiene algún interés en escribir eso, sería genial, pero por ahora, ¡esto ciertamente funcionará para su caso de uso!
Voy a cerrar esto como se respondió, pero no dude en volver a abrirlo si alguno de nosotros puede ayudar más. ¡Gracias por usar Gatsby!