react mackDowan 渲染文本,图片,视频

需要安装:react-markdown;remark-gfm

"react-markdown": "^9.0.1",

"remark-gfm": "^4.0.0",

TypeScript 复制代码
import { useEffect, useState } from 'react';
import ReactMarkdown, { Components } from 'react-markdown';

function checkMediaType(url: string | URL) {
  // 创建URL对象
  let link = new URL(url);

  // 获取路径部分(去除参数)
  let path = link.pathname;

  // 获取路径的最后一个点之后的内容作为文件扩展名
  
  let extension = path?.split('.')?.pop()?.toLowerCase();

  // 声明支持的图片和视频文件扩展名
  const imageExtensions = ['jpg', 'jpeg', 'gif', 'png'];
  const videoExtensions = ['mp4', 'wmv', 'avi', 'mov'];

  // 判断文件扩展名是否在图片扩展名数组中
  if (extension && imageExtensions.includes(extension)) {
    return 'image';
  }

  // 判断文件扩展名是否在视频扩展名数组中
  if (extension && videoExtensions.includes(extension)) {
    return 'video';
  }

  // 扩展名不在图片或视频数组中,返回null表示无法确定媒体类型
  return null;
}

const components: Components = {
  a({ children, node }) {
    if (
      node &&
      typeof node.properties?.href === 'string' &&
      checkMediaType(node.properties.href)
    ) {
      return (
        <video
          style={{ width: 200, height: 200 }}
          controls
          src={node.properties.href}
        ></video>
      );
    }
    return <a {...node?.properties}>{children}</a>;
  },
};

function AIMarkdown() {
  const [content, setContent] = useState('');
  const content1 = `你好我是markDown下面会展示图片及视频:

1. 观看操作视频:[演示(1)](https://www.w3schools.com/html/mov_bbb.mp4)
2. 查看详细步骤图解:![image.png](https://gw.alipayobjects.com/zos/bmw-prod/598d14af-4f1c-497d-b579-5ac42cd4dd1f/k7bjua9c_w132_h130.png)

这些资料将指导您完成通讯录的添加人员等操作。`;
  useEffect(() => {
    let index = 0;
    const i = setInterval(() => {
      if (index < content1.length) {
        setContent((v) => {
          return v + content1[index];
        });
        index++;
      } else {
        clearInterval(i);
      }
    }, 10);
    return () => clearInterval(i);
  }, []);

  return <ReactMarkdown components={components}>{content || ''}</ReactMarkdown>;
}

export default AIMarkdown;

使用

TypeScript 复制代码
//引入文件
import AIMarkdown from './MessageAI';

.
.
.
.


<div className={style.canter}>
   <AIMarkdown />
</div>
相关推荐
学前端搞口饭吃2 分钟前
React props的使用
前端·javascript·react.js
王伯安呢19 分钟前
Java开发环境配置入门指南
java·开发语言·jvm·eclipse·环境搭建·新手
·前路漫漫亦灿灿21 分钟前
C++-类型转换
开发语言·c++
灵感__idea25 分钟前
JavaScript高级程序设计(第5版):前端的能力边界
前端·javascript·程序员
华洛27 分钟前
SEO还没死,GEO之战已经开始
前端·javascript·产品
Kyln.Wu37 分钟前
【python实用小脚本-205】[HR揭秘]手工党逐行查Bug的终结者|Python版代码质量“CT机”加速器(建议收藏)
开发语言·python·bug
计算机毕业设计木哥39 分钟前
Python毕业设计推荐:基于Django的饮食计划推荐与交流分享平台 饮食健康系统 健康食谱计划系统
开发语言·hadoop·spring boot·后端·python·django·课程设计
rockmelodies1 小时前
Java安全体系深度研究:技术演进与攻防实践
java·开发语言·安全
OEC小胖胖1 小时前
Next.js 介绍:为什么选择它来构建你的下一个 Web 应用?
开发语言·前端·web·next.js
阿啄debugIT1 小时前
装饰(Decorator)模式可以在不修改对象外观和功能的情况下添加或者删除对象功能
软件工程·1024程序员节