最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React使用highlight.js Clipboard.js實(shí)現(xiàn)代碼高亮復(fù)制

 更新時(shí)間:2023年04月24日 09:31:59   作者:黃娟  
這篇文章主要為大家介紹了React使用highlight.js Clipboard.js實(shí)現(xiàn)代碼高亮復(fù)制功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

正文

在網(wǎng)頁開發(fā)中,代碼高亮和復(fù)制功能是十分常見的需求。為了讓界面更加美觀,我們通常會(huì)使用一些成熟的庫來實(shí)現(xiàn)這些功能,避免自己手寫復(fù)雜的代碼。而在 React 中,常用的代碼高亮庫是 highlight.js,常用的復(fù)制庫是 Clipboard.js。本篇文章將介紹如何在 React 中使用這兩個(gè)庫,實(shí)現(xiàn)代碼高亮和復(fù)制功能。

安裝 highlight.js 和 Clipboard.js

首先,在我們的 React 項(xiàng)目中安裝 highlight.js 和 Clipboard.js:

npm install highlight.js clipboard --save

安裝完成后,我們就可以在 React 中使用這兩個(gè)庫了。

配置 highlight.js 支持的語言

highlight.js 支持很多種語言的代碼高亮,我們需要配置支持的語言。在本例中,我們只演示部分語言的高亮,可根據(jù)自己的需要進(jìn)行配置。我們創(chuàng)建一個(gè) src/highlight.js 文件:

import hljs from 'highlight.js/lib/core';
// 導(dǎo)入需要的語言高亮
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;

在這個(gè)文件中,我們導(dǎo)入了需要使用的語言高亮,并注冊(cè)到了 highlight.js 中,最后導(dǎo)出了 hljs 對(duì)象。這樣,我們就可以在 React 中方便地使用 highlight.js 了。

創(chuàng)建 CodeBlock 組件

我們創(chuàng)建一個(gè) src/components/CodeBlock/index.js 文件,實(shí)現(xiàn) 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);
      // 創(chuàng)建 clipboard 實(shí)例并保存到變量中
      const clipboard = new Clipboard(`#${language}copy_btn`, {
        text: () => code,
      });
      // 監(jiān)聽復(fù)制成功事件
      clipboard.on('success', () => {
        setCopied(true);
        setTimeout(() => setCopied(false), 2000);
      });
      // 銷毀 clipboard 實(shí)例
      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 ? '已復(fù)制' : '復(fù)制'}
      </button>
    </div>
  );
}

在這個(gè)組件中,我們使用了 useRef 和 useEffect 鉤子,分別保存了代碼塊的 DOM 對(duì)象和復(fù)制按鈕的 Clipboard 對(duì)象。在 useEffect 中,我們使用 highlight.js 對(duì)代碼塊進(jìn)行了高亮,并創(chuàng)建了 Clipboard 實(shí)例,監(jiān)聽了復(fù)制成功事件。當(dāng)點(diǎn)擊復(fù)制按鈕后,會(huì)將代碼塊的內(nèi)容復(fù)制到剪貼板中,并在按鈕上顯示“已復(fù)制”,2 秒后消失。最后,我們將代碼塊和復(fù)制按鈕顯示在了頁面上。

使用 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實(shí)現(xiàn)代碼高亮復(fù)制的詳細(xì)內(nèi)容,更多關(guān)于React代碼高亮復(fù)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • react 項(xiàng)目 中使用 Dllplugin 打包優(yōu)化技巧

    react 項(xiàng)目 中使用 Dllplugin 打包優(yōu)化技巧

    在用 Webpack 打包的時(shí)候,對(duì)于一些不經(jīng)常更新的第三方庫,比如 react,lodash,vue 我們希望能和自己的代碼分離開,這篇文章主要介紹了react 項(xiàng)目 中 使用 Dllplugin 打包優(yōu)化,需要的朋友可以參考下
    2023-01-01
  • React中Context的用法總結(jié)

    React中Context的用法總結(jié)

    Context?提供了一種在組件樹中共享數(shù)據(jù)的方式,而不必通過?props?顯式地逐層傳遞,主要用于共享那些對(duì)于組件樹中許多組件來說是"全局"的數(shù)據(jù),下面小編就來和大家簡(jiǎn)單講講Context的用法吧
    2025-01-01
  • 深入理解React高階組件

    深入理解React高階組件

    本篇文章主要介紹了深入理解React高階組件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • React實(shí)現(xiàn)組件間通信的幾種方式小結(jié)

    React實(shí)現(xiàn)組件間通信的幾種方式小結(jié)

    在React應(yīng)用中,組件間的通信是一個(gè)基礎(chǔ)而關(guān)鍵的概念,理解和掌握不同組件之間的通信方式,可以幫助我們構(gòu)建出更加模塊化、可維護(hù)和可擴(kuò)展的應(yīng)用程序,React提供了多種組件通信的方法,本文給大家詳細(xì)的介紹了這些方法,需要的朋友可以參考下
    2024-07-07
  • 將React+Next.js的項(xiàng)目部署到服務(wù)器的方法

    將React+Next.js的項(xiàng)目部署到服務(wù)器的方法

    本文詳細(xì)介紹了將React+Next.js項(xiàng)目部署到服務(wù)器的步驟,包括服務(wù)器環(huán)境準(zhǔn)備、項(xiàng)目配置與構(gòu)建、啟動(dòng)服務(wù)、配置Nginx反向代理、HTTPS配置、驗(yàn)證與監(jiān)控以及高級(jí)優(yōu)化,感興趣的朋友一起看看吧
    2025-03-03
  • React狀態(tài)管理的簡(jiǎn)明指南

    React狀態(tài)管理的簡(jiǎn)明指南

    Redux 是React最常用的集中狀態(tài)管理工具,本文主要介紹了React狀態(tài)管理的簡(jiǎn)明指南,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解

    React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解

    這篇文章主要為大家介紹了React結(jié)合Drag?API實(shí)現(xiàn)拖拽示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 解決React報(bào)錯(cuò)Property does not exist on type 'JSX.IntrinsicElements'

    解決React報(bào)錯(cuò)Property does not exist on 

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Property does not exist on type 'JSX.IntrinsicElements'解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React中的axios模塊及使用方法

    React中的axios模塊及使用方法

    axios 是一個(gè)基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中,本文給大家分享React中axios模塊的使用方法,感興趣的朋友一起看看吧
    2022-03-03
  • React-Native實(shí)現(xiàn)ListView組件之上拉刷新實(shí)例(iOS和Android通用)

    React-Native實(shí)現(xiàn)ListView組件之上拉刷新實(shí)例(iOS和Android通用)

    本篇文章主要介紹了React-Native實(shí)現(xiàn)ListView組件之上拉刷新實(shí)例(iOS和Android通用),具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07

最新評(píng)論

宜兴市| 中方县| 平乡县| 界首市| 广饶县| 平凉市| 湖南省| 玉田县| 金门县| 酒泉市| 泰来县| 临湘市| 乌鲁木齐县| 库车县| 南丹县| 昌图县| 内乡县| 濮阳市| 宕昌县| 称多县| 互助| 云和县| 芦山县| 汤原县| 绩溪县| 清新县| 徐闻县| 得荣县| 长丰县| 永昌县| 镇远县| 册亨县| 天峨县| 霸州市| 上思县| 林甸县| 南阳市| 泽普县| 调兵山市| 区。| 潍坊市|