Existe uma maneira de ter variáveis nas páginas de redução que serão substituídas por valores? Estou escrevendo documentação sobre um serviço que é um URL. O URL está em alguns arquivos markdown e eu gostaria de não ter que encontrar e substituir caso ele mude.
É a minha melhor opção para adicionar um componente personalizado no Markdown? Parece mão pesada para isso.
Você pode escrever um pequeno auxiliar personalizado para isso (ou usar algo como lodash.template
https://lodash.com/docs/4.17.11#template)
Aqui está uma solução rápida e suja:
Dado um arquivo markdown sample.md
com o seguinte conteúdo:
---
title: Sample
---
## Hello World
This is a [link](%URL%/sub-path), and so is [this](%URL%/sub-path)
Você pode criar um arquivo (vamos chamá-lo de src/utils/template.js
) e escrever algo assim
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
});
}
Agora conectando tudo junto, você só precisa _usar_ esta função de modelo para substituir seu conteúdo. O objeto data
pode ser o que você quiser e pode ser obtido de qualquer lugar (por exemplo, graphql, algum arquivo de constantes, variáveis de ambiente, 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
})
}} />
)
}
Isso faz sentido? Este poderia ser um plugin gatsby -note bastante útil, mas não tenho certeza se existe! Se você tiver algum interesse em escrever isso, seria legal, mas por enquanto, certamente funcionará para o seu caso de uso!
Vou fechar como respondido, mas sinta-se à vontade para reabrir se algum de nós puder ajudar mais. Obrigado por usar o Gatsby!
Comentários muito úteis
Você pode escrever um pequeno auxiliar personalizado para isso (ou usar algo como
lodash.template
https://lodash.com/docs/4.17.11#template)Aqui está uma solução rápida e suja:
Dado um arquivo markdown
sample.md
com o seguinte conteúdo:Você pode criar um arquivo (vamos chamá-lo de
src/utils/template.js
) e escrever algo assimAgora conectando tudo junto, você só precisa _usar_ esta função de modelo para substituir seu conteúdo. O objeto
data
pode ser o que você quiser e pode ser obtido de qualquer lugar (por exemplo, graphql, algum arquivo de constantes, variáveis de ambiente, etc.).Isso faz sentido? Este poderia ser um plugin gatsby -note bastante útil, mas não tenho certeza se existe! Se você tiver algum interesse em escrever isso, seria legal, mas por enquanto, certamente funcionará para o seu caso de uso!
Vou fechar como respondido, mas sinta-se à vontade para reabrir se algum de nós puder ajudar mais. Obrigado por usar o Gatsby!