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

网站建设-设计/独立站seo外链平台

网站建设-设计,独立站seo外链平台,广州市外贸网站建设,网站建设提供的网站资料参考链接:https://blog.csdn.net/huangjuan0229/article/details/130319050 在前端开发中,代码块高亮和复制功能是十分常见的需求。而在 React 中,常用的代码高亮库是 highlight.js,常用的复制库是 Clipboard.js。本篇文章将介绍…

参考链接:https://blog.csdn.net/huangjuan0229/article/details/130319050

在前端开发中,代码块高亮和复制功能是十分常见的需求。而在 React 中,常用的代码高亮库是 highlight.js,常用的复制库是 Clipboard.js。本篇文章将介绍如何在 React 中使用这两个库,实现代码高亮和复制功能。

安装 highlight.js 和 Clipboard.js

首先,在我们的 React 项目中安装 highlight.js 和 Clipboard.js:

npm install highlight.js clipboard --save

注意:
这里的库是highlight.js,不是highlight,博主就因为npm了highlight踩了一些坑,小伙伴们注意一下

安装完成后,我们就可以在 React 中使用这两个库了。
可以在package.json中查看
在这里插入图片描述

配置 highlight.js 支持的语言

highlight.js 支持很多种语言的代码高亮,我们需要配置支持的语言。在本例中,我们只演示部分语言的高亮,可根据自己的需要进行配置。我们创建一个 src/highlight.js 文件:

import hljs from 'highlight.js/lib/core';
// 导入需要的语言高亮
import javascript from 'highlight.js/lib/languages/javascript';
import java from 'highlight.js/lib/languages/java';
import csharp from 'highlight.js/lib/languages/csharp';
import php from 'highlight.js/lib/languages/php';
import python from 'highlight.js/lib/languages/python';
import objectivec from 'highlight.js/lib/languages/objectivec';
import bash from 'highlight.js/lib/languages/bash';hljs.registerLanguage('javascript', javascript);
hljs.registerLanguage('java', java);
hljs.registerLanguage('csharp', csharp);
hljs.registerLanguage('php', php);
hljs.registerLanguage('python', python);
hljs.registerLanguage('objectivec', objectivec);
hljs.registerLanguage('bash', bash);export default hljs;

在这个文件中,我们导入了需要使用的语言高亮,并注册到了 highlight.js 中,最后导出了 hljs 对象。这样,我们就可以在 React 中方便地使用 highlight.js 了。

创建 CodeBlock 组件

我们创建一个 src/components/CodeBlock/index.js 文件,实现 CodeBlock 组件:

import React, { useEffect, useRef, useState } from 'react';
import hljs from '../../highlight';
import Clipboard from 'clipboard';import 'highlight.js/styles/dark.css';export default function CodeBlock({ language, code }) {const preRef = useRef(null);const [copied, setCopied] = useState(false);useEffect(() => {if (preRef.current) {hljs.highlightBlock(preRef.current);// 创建 clipboard 实例并保存到变量中const clipboard = new Clipboard(`#${language}copy_btn`, {text: () => code,});// 监听复制成功事件clipboard.on('success', () => {setCopied(true);setTimeout(() => setCopied(false), 2000);});// 销毁 clipboard 实例return () => {clipboard.destroy();};}}, [code]);return (<div className="code-block" style={{ position: 'relative', marginTop: 8 }}><pre><code id={language} ref={preRef} className={language}>{code}</code></pre><button id={`${language}copy_btn`} style={{ position: 'absolute', top: 4, right: 4, lineHeight: '14px' }} className="code-block__button" data-clipboard-target={`#${language}`} disabled={!preRef.current}>{copied ? '已复制' : '复制'}</button></div>);
}

在这个组件中,我们使用了 useRefuseEffect 钩子,分别保存了代码块的 DOM 对象和复制按钮的 Clipboard 对象。在 useEffect 中,我们使用 highlight.js 对代码块进行了高亮,并创建了 Clipboard 实例,监听了复制成功事件。当点击复制按钮后,会将代码块的内容复制到剪贴板中,并在按钮上显示“已复制”,2 秒后消失。最后,我们将代码块和复制按钮显示在了页面上。

使用 CodeBlock 组件

import React from 'react';
import CodeBlock from '@/components/CodeBlock';export default function BlogPost() {const code = `import React from 'react';
import CodeBlock from '@/components/CodeBlock';export default function BlogPost() {const code = '111';return (<div><CodeBlock language="javascript" code={code} /></div>);
}`;return (<div><CodeBlock language="javascript" code={code} /></div>);
}

效果展示

在这里插入图片描述

http://www.jmfq.cn/news/5074669.html

相关文章:

  • 虎门网站建设服务商/优秀的软文
  • 网站的虚拟人怎么做的/市场推广计划怎么写
  • 2021网站你懂我意思正能量/电商网站网址
  • 哪些网站是做婴童辅食招商的/企业网站排名优化
  • ps做的网站保存不了jpg/如何做好搜索引擎优化工作
  • 作品设计思路范文/百家号关键词排名优化
  • 做封面的网站在哪里/软文怎么写吸引人
  • wordpress 换行用/seo排名点击器曝光行者seo
  • 江苏中小企业建站价格/全网营销与seo
  • 武汉网络兼职网站建设/杭州网站推广找哪家
  • wordpress如何启用全站ssl/宁波网站推广大全
  • 简单logo设计/短视频seo关键词
  • webstorm做网站/搜索引擎优化概述
  • 竞价网站服务器/打开百度一下网页版
  • 哪里有网站建设加盟合作/常州百度推广代理
  • 如何做公司网站的/关键词seo公司
  • 做单页网站需要做什么/济南疫情最新消息
  • 张家界企业网站制作/推广什么软件可以长期赚钱
  • 山东网站制作哪家好/推广优化排名
  • 做网站要那些设备/百度关键词排名神器
  • linux做网站/微信如何投放广告
  • 网站指向错误/网店如何推广
  • 最适合企业网站建设的cms系统/公司建官网要多少钱
  • 新网站排名优化/企业管理培训课程费用
  • 做网站什么价位/seo优化师是什么
  • win2008 iis7创建网站/许昌seo公司
  • jsp做网站de后台管理/外链代发平台
  • 一级a做爰片免费观网站看无码/网站自动秒收录工具
  • 一个专门做澳洲直邮的网站吗/seo网络优化平台
  • 如何做网站旅游产品分析/shopify seo