如何使用Gatsby调用和使用内容丰富文本字段中的嵌入式资产?

时间:2019-04-06 23:24:00

标签: reactjs gatsby contentful

我将Gatsby用作我的React应用程序的启动器。为了处理内容,我使用的是Contentful。

在我的内容内容模型中,我创建了以下内容类型:

  • 短文本
  • 短文本
  • 媒体
  • 富文本
  • 富文本

使用Gatsby的gatsby-source-contenful和@ contentful / gatsby-transformer-contentful-richtext插件,我已经成功渲染了所有这些内容类型,但在Rich Text类型中,我无法渲染Embedded其中的资产。

根据Gatsby文档found here

的示例,我尝试通过npm安装@ contentful / rich-text-types并使用常量MARK和INLINES。
const { MARKS, INLINES } = require('@contentful/rich-text-types')
{
      resolve: `@contentful/gatsby-transformer-contentful-richtext`,
      options: {
        renderOptions: {
          /*
           * Defines custom html string for each node type like heading, embedded entries etc..
           */
          renderNode: {
            // Example
            [INLINES.ASSET_HYPERLINK]: node => {
              return `<img class='custom-asset' src="${
                node.data.target.fields.file['en-US'].url
              }"/>`
            },
            [INLINES.EMBEDDED_ENTRY]: node => {
              return `<div class='custom-entry' />${
                node.data.target.fields.name['en-US']
              }</div>`
            },
          },
          /*
           * Defines custom html string for each mark type like bold, italic etc..
           */
          renderMark: {
            // Example
            [MARKS.BOLD]: text => `<strong>${text}<strong>`,
          },
        },
      },
    },

理想情况下,我希望Gatbsy以<img src="[ASSET URL]" alt="[ASSET DESCRIPTION]">的形式自动将Rich Text类型的图像资源呈现为

1 个答案:

答案 0 :(得分:0)

尝试一下:

const { BLOCKS } = require('@contentful/rich-text-types')
...
renderNode: {
  [BLOCKS.EMBEDDED_ASSET]: node => {
    // console.log(node)
    let { description, title, file } = node.data.target.fields
    // console.log(file["en-US"].url)
    return <img src={file["en-US"].url} />
  },
},

这似乎对我有用,尽管图像似乎是全尺寸的,并且加载速度很慢。需要其他工作,但这似乎确实有效(至少在开发中如此)

编辑:
当我发送graphql查询时,我的fields的{​​{1}}属性似乎停止出现了……并且这停止了工作……超级奇怪

编辑2: 如果删除node.data.target文件夹(.cache),上述问题将得到解决。 https://github.com/gatsbyjs/gatsby/issues/10592