Gatsby: マークダウンの変数?

作成日 2018年11月28日  ·  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-remark-プラグインでもありますが、それが存在するかどうかはわかりません。 それを書くことに興味があれば、それは素晴らしいことですが、今のところ、これはあなたのユースケースで確かに機能します!

回答どおりにこれを閉じますが、さらにサポートが必要な場合は、お気軽に再度開いてください。 ギャツビーをご利用いただきありがとうございます。

>すべてのコメント

このための小さなカスタムヘルパーを書くことができます(または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-remark-プラグインでもありますが、それが存在するかどうかはわかりません。 それを書くことに興味があれば、それは素晴らしいことですが、今のところ、これはあなたのユースケースで確かに機能します!

回答どおりにこれを閉じますが、さらにサポートが必要な場合は、お気軽に再度開いてください。 ギャツビーをご利用いただきありがとうございます。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

brandonmp picture brandonmp  ·  3コメント

theduke picture theduke  ·  3コメント

kalinchernev picture kalinchernev  ·  3コメント

3CordGuy picture 3CordGuy  ·  3コメント

rossPatton picture rossPatton  ·  3コメント