Gatsby: Переменные в Markdown?

Созданный на 28 нояб. 2018  ·  1Комментарий  ·  Источник: gatsbyjs/gatsby

Резюме

Есть ли способ иметь переменные на страницах уценки, которые будут заменены значениями? Я пишу документацию об услуге, которая в виде URL. URL-адрес находится в нескольких файлах уценки, и мне бы не хотелось искать и заменять его в случае изменения.

Лучше всего добавить пользовательский компонент в Markdown? Это кажется тяжелым для этого.

question or discussion

Самый полезный комментарий

Вы можете написать для этого небольшой помощник (или использовать что-то вроде 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 со следующим содержимым:

---
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-, но я не уверен, что он существует! Если вы заинтересованы в написании этого, это было бы круто, но пока это, безусловно, сработает для вашего варианта использования!

Собираюсь закрыть это, как ответил, но, пожалуйста, не стесняйтесь снова открыть, если кто-то из нас может помочь в дальнейшем. Спасибо за использование Гэтсби!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Oppenheimer1 picture Oppenheimer1  ·  3Комментарии

magicly picture magicly  ·  3Комментарии

rossPatton picture rossPatton  ·  3Комментарии

totsteps picture totsteps  ·  3Комментарии

andykais picture andykais  ·  3Комментарии