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

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.lqws.cn/news/75745.html

相关文章:

  • A. We Need the Zero
  • NX869NX874美光固态颗粒NX877NX883
  • Vortex GPGPU的github流程跑通与功能模块波形探索(四)
  • FFmpeg移植教程(linux平台)
  • RSCUcaller
  • 12.1 GUI 事件处理
  • 《 C++ 点滴漫谈: 四十 》文本的艺术:C++ 正则表达式的高效应用之道
  • 前端高频面试题2:JavaScript/TypeScript
  • 迈向分布式智能:解析MCP到A2A的通信范式迁移
  • 第十二节:第四部分:集合框架:List系列集合:LinkedList集合的底层原理、特有方法、栈、队列
  • 【华为云Astro Zero】组装设备管理页面开发(图形拖拽 + 脚本绑定)
  • Ubuntu上进行VS Code的配置
  • STM32G4 电机外设篇(四)DAC输出电流波形 + CAN通讯
  • 16QAM在瑞利信道下的性能仿真:从理论到实践的完整解析(附完整代码)
  • 审计- 3- 风险评估:内部控制
  • NVMe协议简介之AXI总线更新
  • MySQL锁机制
  • Linux 脚本文件编辑(vim)
  • 【接口测试】基础知识
  • 使用 HTML + JavaScript 实现图片裁剪上传功能
  • PCIe—TS1/TS2 之Polling.Configuration (二)
  • 【位运算】只出现⼀次的数字 II(medium)
  • world quant教程学习
  • 第二章支线五 ·CSS炼金续章:变量与暗黑主题术
  • 前端八股之Vue
  • 手机归属地查询接口如何用Java调用?
  • 1.文件操作相关的库
  • 阿里云国际站,如何通过代理商邀请的链接注册账号
  • 600+纯CSS加载动画一键获取指南
  • 我爱学算法之—— 前缀和(上)