我的编程空间,编程开发者的网络收藏夹
学习永远不晚

React使用highlight.jsClipboard.js实现代码高亮复制

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

React使用highlight.jsClipboard.js实现代码高亮复制

正文

在网页开发中,代码高亮和复制功能是十分常见的需求。为了让界面更加美观,我们通常会使用一些成熟的库来实现这些功能,避免自己手写复杂的代码。而在 React 中,常用的代码高亮库是 highlight.js,常用的复制库是 Clipboard.js。本篇文章将介绍如何在 React 中使用这两个库,实现代码高亮和复制功能。

安装 highlight.js 和 Clipboard.js

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

npm install highlight.js clipboard --save

安装完成后,我们就可以在 React 中使用这两个库了。

配置 highlight.js 支持的语言

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

import hljs from 'highlight.js/lib/core';
// 导入需要的语言高亮
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('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 组件

我们创建一个 class="lazy" data-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/default.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>
  );
}

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

使用 CodeBlock 组件

import React from 'react';
import CodeBlock from '../components/CodeBlock';
export default function BlogPost() {
  const code = `
    public static void main(String[] args) {
      System.out.println("Hello, World!");
    }
  `;
  return (
    <div>
      <h2>这是一篇博客文章</h2>
      <p>下面是一段 Java 代码:</p>
      <CodeBlock language="java" code=[code] />
    </div>
  );
}

效果展示

参考

GitHub源码

以上就是React使用highlight.js Clipboard.js实现代码高亮复制的详细内容,更多关于React代码高亮复制的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

React使用highlight.jsClipboard.js实现代码高亮复制

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

React使用highlight.jsClipboard.js实现代码高亮复制

这篇文章主要为大家介绍了React使用highlight.jsClipboard.js实现代码高亮复制功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-17

使用GPT写代码实现高亮页面关键字

这篇文章主要为大家介绍了使用GPT写代码实现高亮页面关键字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-16

如何在PyQt5中使用QListView实现一个代码高亮功能

今天就跟大家聊聊有关如何在PyQt5中使用QListView实现一个代码高亮功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。使用setCurrentIndex(int) 来设置if
2023-06-14

在react中使用highlight.js将页面上的代码高亮方法是什么

今天就跟大家聊聊有关在react中使用highlight.js将页面上的代码高亮方法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。通过 highlight.js 库实现对文章正
2023-06-26

怎么在vue中利用monaco实现一个代码高亮效果

怎么在vue中利用monaco实现一个代码高亮效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。为什么要使用VueVue是一款友好的、多用途且高性能的JavaS
2023-06-06

React-Native Android 与 IOS App使用一份代码实现方法

React-Native Android 与 IOS 共用代码 React-Native 开发的App, 所有组件iOS & Android 共用, 共享一份代码 包括一些自定义的组件, 如NavigationBar, TabBar, S
2022-06-06

SpringMVC编程使用Controller接口实现控制器实例代码

Controller简介Controller控制器,是MVC中的部分C,为什么是部分呢?因为此处的控制器主要负责功能处理部分:1、收集、验证请求参数并绑定到命令对象;2、将命令对象交给业务对象,由业务对象处理并返回模型数据;3、返回Mode
2023-05-30

如何在Python中使用多继承实现代码复用

如何在Python中使用多继承实现代码复用多继承是Python中一个强大且灵活的特性,可以帮助我们在编写代码时实现更高效的代码复用。本文将介绍如何在Python中使用多继承,并通过具体的代码示例来说明其使用方法。使用多继承的基本语法在Pyt
2023-10-22

如何使用MySQL的复制功能实现高可用性和容错性?

如何使用MySQL的复制功能实现高可用性和容错性?随着互联网的快速发展,数据库的高可用性和容错性变得越来越重要。MySQL是一种广泛使用的开源关系型数据库,它的复制功能可以帮助我们实现数据库的高可用性和容错性。在本文中,我们将介绍如何使用M
2023-10-22

python如何实现MK突变检验方法,代码复制修改可用

这篇文章主要介绍了python如何实现MK突变检验方法,代码复制修改可用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-05-19

编程热搜

目录