如何在PrismJS?NextJs APP中自动缩进代码字符串

5kgi1eie  于 2022-12-18  发布在  其他
关注(0)|答案(1)|浏览(138)

我尝试在一个react项目中使用PrimsJs,我的目标是创建一个静态模板页面,并添加代码片段,我不确定是否是最佳选项(primsJs),但我尝试自动缩进代码,因为实际上我的代码在一行中呈现

这是我的主页

import { MainLayout } from "../components/layouts/MainLayout";
import { Hero1, Hero1Code} from "../theme/blocks/hero/Hero1";

export default function Home() {
    return (
        <MainLayout>
            <h1>Home Page</h1>
            <Hero1 />
            <Hero1Code />
        </MainLayout>
    );
}

这是我的PRIMSJS组件

import React, { useEffect } from "react";
import Prism from "prismjs";
import "prismjs/themes/prism-tomorrow.css";

export default function Code({ code, language }) {
  useEffect(() => {
    Prism.highlightAll();
  }, []);

  return (
    <div className="Code">
      <pre>
        <code className={`language-${language}`}>{code}</code>
      </pre>
    </div>
  );
}

这是我的组件

import React from "react";

import { renderToString } from "react-dom/server";
import Code from "../../../components/prism/code";

export const Hero1 = () => {
    return (
        <section className="wrapper bg-light">
           ...
        </section>

    );
};

export const Hero1Code = () => {
    const content = renderToString(<Hero1/>);
    return (
        <>
            <div className="App">
                <Code code={content} language="html" />
            </div>
        </>
    );
};


任何帮助将是非常欢迎的,我也开放尝试其他包

t5zmwmid

t5zmwmid1#

我不认为PrismJS有这样的选项,在我看来,最好在将code字符串传递给<Code />组件之前将其缩进。
您可以使用此库:https://github.com/zebzhao/indent.js
导入:

import indent from 'indent.js';

并像这样缩进代码:

const content = indent.html(renderToString(<Hero1/>));

但是,看一下截图代码示例,我可以看到有很多div被压缩到一行中,在这种情况下,缩进并没有真正的帮助,因为它照顾到了各行之间的关系。
您可以看看如何使用这样的库,它似乎将代码拆分为单独的行。
https://www.npmjs.com/package/pretty

相关问题