当前位置: 首页 > article >正文

react实现markdown文件预览

文章目录

  • react实现markdown文件预览
    • 1、实现md文件预览
    • 2、解决图片不显示
    • 3、实现效果

react实现markdown文件预览

1、实现md文件预览

1️⃣第一步:安装依赖:

npm install react-markdown remark-gfm
  • react-markdown:将 Markdown 渲染为 React 元素。
  • remark-gfm:支持 GitHub 风格的 Markdown(如表格、任务列表等)。

2️⃣创建组件进行渲染:

你可以创建一个 MarkdownViewer.jsx 组件:

// MarkdownViewer.jsx
import React, { useEffect, useState } from 'react';
import ReactMarkdown from 'react-markdown';
import remarkGfm from 'remark-gfm';const MarkdownViewer = ({ filePath }) => {const [content, setContent] = useState('');useEffect(() => {fetch(filePath).then((res) => res.text()).then((text) => setContent(text)).catch((err) => console.error(err));}, [filePath]);return (<div className="prose max-w-none"><ReactMarkdown remarkPlugins={[remarkGfm]}>{content}</ReactMarkdown></div>);
};export default MarkdownViewer;

3️⃣第三步:使用组件

假设你有一个 README.md 文件放在 public 目录下:

// App.jsx
import React from 'react';
import MarkdownViewer from './MarkdownViewer';function App() {return (<div className="p-4"><h1 className="text-2xl font-bold mb-4">Markdown 文件预览</h1><MarkdownViewer filePath="/README.md" /></div>);
}export default App;

2、解决图片不显示

1️⃣使用代理服务器转发图片:

// server.js
const express = require('express');
const cors = require('cors');
const app = express();app.use(cors());app.get('/proxy', async (req, res) => {const imageUrl = req.query.url;if (!imageUrl) return res.status(400).send('No url');try {const response = await fetch(imageUrl);const contentType = response.headers.get('content-type');const buffer = await response.arrayBuffer();res.set('Content-Type', contentType);res.send(Buffer.from(buffer));} catch (e) {res.status(500).send('Image proxy failed');}
});app.listen(8080, () => {console.log('Image proxy running at http://localhost:80');
});

2️⃣请求方式:

![代理图](http://localhost:8080/proxy?url=https://gitee.com/durant7/piclist/raw/master/images/20250531074519.png)

3️⃣自定义图片渲染:

// 自定义 img 渲染
const MarkdownImage = ({ src, alt }) => {return (<imgsrc={'http://localhost:80/proxy?url='+src}alt={alt}style={{ maxWidth: '100%', height: 'auto' }}onError={() => console.warn('图片加载失败:', src)}/>);
};

4️⃣修改md文件渲染方式:

<ReactMarkdown
remarkPlugins={[remarkGfm]}
components={{img: MarkdownImage,}}>{content}
</ReactMarkdown>

3、实现效果

image-20250602230702062

http://www.lryc.cn/news/2402001.html

相关文章:

  • Neo4j 认证与授权:原理、技术与最佳实践深度解析
  • Android Studio 配置之gitignore
  • PDF处理控件Aspose.PDF教程:在 C# 中更改 PDF 页面大小
  • Perl One-liner 数据处理——基础语法篇【匠心】
  • PHP 打印扩展开发:从易联云到小鹅通的多驱动集成实践
  • rust或tauri项目执行命令的时候,cmd窗口也会弹出显示解决方法
  • [软件工程] 文档 | 技术文档撰写全流程指南
  • 使用Python进行函数作画
  • Python应用continue关键字初解
  • 微型导轨在手术机器人领域中有哪些关键操作?
  • FPGA 的硬件结构
  • EasyRTC音视频实时通话助力新一代WebP2P视频物联网应用解决方案
  • QT开发技术【ffmpeg + QAudioOutput】音乐播放器 完善
  • vscode 离线安装第三方库跳转库
  • DevExpress WinForms v24.2 - 新增日程组件、电子表格组件功能扩展
  • 基于机器学习的心脏病预测模型构建与可解释性分析
  • VisDrone无人机视觉挑战赛观察解析2025.6.5
  • Monorepo架构: Lerna、NX、Turbo等对比与应用分析
  • redis进入后台操作、查看key、删除key
  • 谷粒商城-分布式微服务项目-高级篇[三]
  • 实现购物车微信小程序
  • 26考研 | 王道 | 计算机组成原理 | 四、指令系统
  • 互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用
  • 在 Windows 系统安装 Git
  • JavaSec-SSTI - 模板引擎注入
  • 基于InternLM的情感调节大师FunGPT
  • 【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战
  • Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进
  • PLC远程控制网关支持多塘口水环境数据边缘计算与远程安全传输的配置指南
  • 3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战