Есть ли способ иметь переменные на страницах уценки, которые будут заменены значениями? Я пишу документацию об услуге, которая в виде URL. URL-адрес находится в нескольких файлах уценки, и мне бы не хотелось искать и заменять его в случае изменения.
Лучше всего добавить пользовательский компонент в Markdown? Это кажется тяжелым для этого.
Вы можете написать для этого небольшой помощник (или использовать что-то вроде lodash.template
https://lodash.com/docs/4.17.11#template)
Вот быстрое и грязное решение:
Учитывая файл уценки sample.md
со следующим содержимым:
---
title: Sample
---
## Hello World
This is a [link](%URL%/sub-path), and so is [this](%URL%/sub-path)
Вы можете создать файл (назовем его src/utils/template.js
) и написать что-то вроде этого
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
});
}
Теперь, объединив все вместе, вам просто нужно _использовать_ эту функцию-шаблон для замены вашего контента. Объект data
может быть любым, и его можно извлечь откуда угодно (например, graphql, файл некоторых констант, переменные среды и т. Д.).
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
})
}} />
)
}
Имеет ли это смысл? Это также может быть довольно полезный плагин gatsby-comment-, но я не уверен, что он существует! Если вы заинтересованы в написании этого, это было бы круто, но пока это, безусловно, сработает для вашего варианта использования!
Собираюсь закрыть это, как ответил, но, пожалуйста, не стесняйтесь снова открыть, если кто-то из нас может помочь в дальнейшем. Спасибо за использование Гэтсби!
Самый полезный комментарий
Вы можете написать для этого небольшой помощник (или использовать что-то вроде
lodash.template
https://lodash.com/docs/4.17.11#template)Вот быстрое и грязное решение:
Учитывая файл уценки
sample.md
со следующим содержимым:Вы можете создать файл (назовем его
src/utils/template.js
) и написать что-то вроде этогоТеперь, объединив все вместе, вам просто нужно _использовать_ эту функцию-шаблон для замены вашего контента. Объект
data
может быть любым, и его можно извлечь откуда угодно (например, graphql, файл некоторых констант, переменные среды и т. Д.).Имеет ли это смысл? Это также может быть довольно полезный плагин gatsby-comment-, но я не уверен, что он существует! Если вы заинтересованы в написании этого, это было бы круто, но пока это, безусловно, сработает для вашего варианта использования!
Собираюсь закрыть это, как ответил, но, пожалуйста, не стесняйтесь снова открыть, если кто-то из нас может помочь в дальнейшем. Спасибо за использование Гэтсби!