当前位置: 首页 > 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

相关文章:

  • Flask+LayUI开发手记(七):头像的上传及突破static目录限制
  • 【Linux】Git原理与使用
  • Day 37 训练
  • 01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
  • 网络攻防技术五:网络扫描技术
  • 基于爬取的典籍数据重新设计前端界面
  • 循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例
  • EXCEL--累加,获取大于某个值的第一个数
  • 深度学习和神经网络 卷积神经网络CNN
  • 数据库系统概论(十一)SQL 集合查询 超详细讲解(附带例题表格对比带你一步步掌握)
  • Golang——5、函数详解、time包及日期函数
  • 编译原理实验 之 TINY 之 语义分析(第二次作业)
  • 第九章:LLMOps自动化流水线:释放CI/CD/CT的真正力量
  • SQL 中的 `CASE WHEN` 如何使用?
  • AI书签管理工具开发全记录(九):用户端页面集成与展示
  • 排序算法——详解
  • 4.大语言模型预备数学知识
  • 【iOS(swift)笔记-13】App版本不升级时本地数据库sqlite更新逻辑一
  • 企业展示型网站模板HTML5网站模板下载指南
  • PostgreSQL 在生物信息学中的应用
  • 区政府网站自查整改和制度建设/有什么软件可以推广
  • 郑州交易网站建设/外链工具下载
  • 网站备案失败/seo基础入门视频教程
  • vue可以做pc端网站吗/正规电商平台有哪些
  • 网站建设业务的途径的体会/东莞网络推广系统
  • 章丘建设网站/推广seo公司