Gatsby: Variables en Markdown?

Creado en 28 nov. 2018  ·  1Comentario  ·  Fuente: gatsbyjs/gatsby

Resumen

¿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.

question or discussion

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:

---
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!

>Todos los comentarios

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!

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

benstr picture benstr  ·  3Comentarios

andykais picture andykais  ·  3Comentarios

totsteps picture totsteps  ·  3Comentarios

KyleAMathews picture KyleAMathews  ·  3Comentarios

hobochild picture hobochild  ·  3Comentarios