You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+TypeScript+Vite项目中Markdoc无法渲染Markdown的问题求助

解决React + TypeScript + Vite中Markdoc无法渲染富文本的问题

问题原因

你的代码核心问题是传入的Markdown字符串包含大量前导缩进,Markdoc会将缩进超过4个空格的内容识别为代码块,导致原本的标题、引用语法被当作普通文本解析。

解决方案

1. 清理输入字符串的多余缩进

你可以通过两种方式处理:

方式一:直接调整模板字符串写法

去掉source模板字符串中每一行的多余前导空格,确保Markdown语法符号(#、>)处于行首:

// Home.tsx
import { Document } from "@containers";

export function Home() {
    return (
        <div>
            <Document
                source={`# Hello world.
> My first Markdoc page`}
            />
        </div>
    );
}

export default Home;
方式二:在Document组件中自动清理

如果需要保留模板字符串的缩进格式,可以在解析前对输入文本进行预处理,去除行首多余空格并修剪首尾空白:

// Document.tsx
import React from "react";
import Markdoc from "@markdoc/markdoc";

const config = {};

interface DocumentProps {
    source: string;
}

export function Document({ source }: DocumentProps) {
    // 修剪首尾空白,同时移除每一行的前导空格
    const cleanedSource = source.trim().replace(/^\s+/gm, '');
    const ast = Markdoc.parse(cleanedSource);
    const content = Markdoc.transform(ast, config);

    return Markdoc.renderers.react(content, React);
}

export default Document;

2. 验证Markdoc版本

确保安装了最新稳定版的Markdoc,避免版本兼容问题:

npm install @markdoc/markdoc@latest

3. 可选:显式配置基础标签(增强稳定性)

虽然空配置支持基础语法,但显式声明标签映射可以避免潜在的解析异常:

// Document.tsx 中的config修改为
const config = {
  tags: {
    h1: { render: 'h1' },
    blockquote: { render: 'blockquote' },
    // 可根据需要添加更多基础标签(h2-h6、p、strong等)
  },
};

测试验证

修改后重新启动Vite开发服务器,原本的Markdown语法会被正确渲染为<h1>和<blockquote>元素,显示为富文本效果。

内容的提问来源于stack exchange,提问作者tedchow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 12:25:12