【发布时间】:2021-12-09 12:23:14
【问题描述】:
我正在开发一个使用 Contentful 作为其无头 CMS 的 Gatsby 项目 - 渲染特定的富文本字段让我发疯。
这是我尝试渲染的文档示例 - 它基本上是一个有序列表:
{
"nodeType": "document",
"data": {},
"content": [
{
"nodeType": "ordered-list",
"content": [
/* item 1 */
{
"nodeType": "list-item",
"content": [
{
"nodeType": "paragraph",
"content": [
{
"nodeType": "text",
"value": "Lorem 1.",
"marks": [],
"data": {}
}
],
"data": {}
}
],
"data": {}
},
/* item 2 */
{
"nodeType": "list-item",
"content": [
{
"nodeType": "paragraph",
"content": [
{
"nodeType": "text",
"value": "Lorem 2",
"marks": [],
"data": {}
}
],
"data": {}
}
],
"data": {}
},
],
"data": {}
}
]
}
我想在我的 Gatsby 项目中渲染它,而不使用它的 ol 和 li 标签,如下所示:
<div class="single-instruction">
<header>
<p>Step 1</p>
<div></div>
</header>
<p>Lorem 1.</p>
</div>
<div class="single-instruction">
<header>
<p>Step 1</p>
<div></div>
</header>
<p>Lorem 2.</p>
</div>
按照 Contentful 的文档,我正在尝试使用 @contentful/rich-text-types 包来呈现它。这是我设法达到的程度:
import { BLOCKS } from "@contentful/rich-text-types";
import { renderRichText } from "gatsby-source-contentful/rich-text";
const options = {
renderNode: {
[BLOCKS.LIST_ITEM]: (node, children) => (
<div className="single-instruction">
<header>
<p>step </p>
<div></div>
</header>
{children}
</div>
),
},
};
renderRichText(instructions, options)
这当然不会呈现步骤编号。 我觉得我现在很接近了!但是对于我的生活,我似乎无法找到呈现有序列表项索引的正确方法。如果这是一个我可以简单映射的数组,我很容易得到。
有人知道我在这里缺少什么吗?
【问题讨论】:
-
我的问题是——如果您不想在前端呈现带有
ol和li的列表,为什么还要在富文本字段中使用列表?也许您可以在富文本字段中链接的单独内容类型可能是合适的,因此您可以通过富文本反应渲染器获取数据并按照您的意愿使用它? -
这是因为我的最终用户首先喜欢富文本,他们可以简单地从其他地方复制粘贴内容。我仍将呈现一个列表,但在每个项目之前附加一个带有项目索引的标题。
标签: reactjs contentful richtext