react中代碼塊輸出,代碼高亮顯示,帶行號(hào),能復(fù)制的問(wèn)題
react 代碼塊輸出,代碼高亮顯示,帶行號(hào),能復(fù)制
以modal組件為例
import React, { useState, useEffect } from 'react';
import { Modal, Button, message } from 'antd';
import Highlight from 'react-highlight';
import "highlight.js/styles/mono-blue.css";
import { CopyToClipboard } from 'react-copy-to-clipboard';
import "./infoModal.less";
import hljs from 'highlight.js';
?
export default function infoModal(props: any) {
? const { visible, handleCancel, handleOk, modalType } = props;
? const [title, setIitle] = useState('');
? const [num, setNum] = useState(0);
? const [data, setData] = useState({
? ? "a": title,
? ? "a2": "1",
? ? "a3": "1",
? ? "a4": "1",
? ? "a5": "1",
? ? "a6": "1",
? ? "a7": "1",
? ? "a8": "1",
? ? "a9": "1",
? });
?
?
?
? useEffect(() => {
? ? if (modalType === "in") { setIitle("入?yún)⑿畔?) } else { setIitle("出參信息") };
? }, [modalType]);
?
? //顯示行號(hào)
? useEffect(() => {
? ? if (visible) {
? ? ? hljs.initHighlightingOnLoad();
? ? ? document.querySelectorAll('pre code').forEach((block) => {
? ? ? ? block.innerHTML = "<ul id='ulcode'><li>" + block.innerHTML.replace(/\n/g, "\n</li><li>") + " </li></ul>";
? ? ? });
? ? }
? }, [visible])
?
? const handleCopy = () => {
? ? message.success('復(fù)制成功!')
? };
?
? return <div>
? ? <Modal title={title} visible={visible} onCancel={handleCancel} onOk={handleOk}
? ? ? footer={[
? ? ? ? <CopyToClipboard text={JSON.stringify(data, null, 2)} onCopy={handleCopy}>
? ? ? ? ? <Button>復(fù)制</Button>
? ? ? ? </CopyToClipboard>,
? ? ? ? <Button key="submit" type="primary" onClick={handleCancel}>確定</Button>
? ? ? ]}
? ? >
? ? ? <Highlight className="javascript mycode" >
? ? ? ? {JSON.stringify(data, null, 2)}
? ? ? </Highlight>
? ? </Modal>
? </div>;
}infoModal.less樣式
.hljs ul {?? ??? ??? ?
? list-style: decimal;?? ??? ??? ?
? margin: 0 0 0 40px!important;?? ??? ??? ?
? padding: 0?? ??? ??? ?
? }?? ??? ??? ?
? .hljs li {?? ??? ??? ?
? list-style: decimal-leading-zero;?? ??? ??? ?
? border-left: 1px solid #333!important;?? ??? ??? ?
? padding: 2px 5px!important;?? ??? ??? ?
? margin: 0!important;?? ??? ??? ?
? line-height: 14px;?? ??? ??? ?
? width: 100%;?? ??? ??? ?
? box-sizing: border-box
? }
? .hljs li:nth-of-type(even) {
? background-color: rgba(255,255,255,.015);
? color: inherit
? }
?
?
? .javascript{
? ? max-height:400px;
? }效果圖:

- 代碼塊顯示:react-highlight插件
- 代碼塊復(fù)制:react-copy-to-clipboard插件
- 代碼塊顯示行號(hào):highlight.js插件+js代碼(上文中已注釋)+less樣式(上文中已添加)
react 代碼塊插件
代碼塊插件
vscode擴(kuò)展搜索 ES7 React/Redux/GraphQL/React-Native snippetsd或者React-Native/React/Redux snippets for es6/es7 并安裝(如果安裝后者 直接cccs可以一鍵生成模板塊 安裝前者 步驟如下)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
React實(shí)現(xiàn)控制減少useContext導(dǎo)致非必要的渲染詳解
這篇文章主要介紹了React如何有效減少使用useContext導(dǎo)致的不必要渲染,使用useContext在改變一個(gè)數(shù)據(jù)時(shí),是通過(guò)自己逐級(jí)查找對(duì)比改變的數(shù)據(jù)然后渲染,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11
React router動(dòng)態(tài)加載組件之適配器模式的應(yīng)用詳解
這篇文章主要介紹了React router動(dòng)態(tài)加載組件之適配器模式的應(yīng)用 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
基于React+Redux的SSR實(shí)現(xiàn)方法
這篇文章主要介紹了基于React+Redux的SSR實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
React中的useState和setState的執(zhí)行機(jī)制詳解
這篇文章主要介紹了React中的useState和setState的執(zhí)行機(jī)制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
react中實(shí)現(xiàn)拖拽排序react-dnd功能
這篇文章主要介紹了react中實(shí)現(xiàn)拖拽排序react-dnd功能,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
react?路由權(quán)限動(dòng)態(tài)菜單方案配置react-router-auth-plus
這篇文章主要為大家介紹了react路由權(quán)限動(dòng)態(tài)菜單方案react-router-auth-plus傻瓜式配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

