当前位置: 首页 > 知识库问答 >
问题:

如何从呈现组件获取HTML输出

洪伟兆
2023-03-14

我是这个世界的新手,并试图进入这个世界。我正在编写一个样式指南,需要显示一些HTML代码作为示例。我使用的是ReactPrism,我无法在PrismCode组件中获得HTML输出,我已经找到了一个解决方法,使用ReactToJSX来显示jsx代码而不是HTML。代码如下:

import React from 'react';
import {PrismCode} from "react-prism";
import reactToJsx from 'react-to-jsx';

class CodePreview extends React.Component {
    render (){
        return (
            <div>
                {this.props.children}
                <h5>Code example</h5>
                <pre>
                    <PrismCode className="language-javascript">
                        {reactToJsx(this.props.children)}
                    </PrismCode>
                </pre>
            </div>
        );
    }
}

export default CodePreview;

因此,基本上我希望将this.props.children(组件)呈现为HTML代码,而不是PrismCode中的内容,我甚至尝试了如下所示https://github.com/tomchentw/react-prism,但它不起作用。不知道我做错了什么!

<PrismCode className="language-javascript">
    {require("raw-loader!./PrismCode")}
</PrismCode>

共有1个答案

许丁雷
2023-03-14

你有没有考虑过用降价的方式写你的文件?我为react添加了一些特殊标签:

```react:mirror
<Slider
  value={7}
/>
```

这将显示呈现的组件以及突出显示的JSX语法。

```react:demo
<PropsEditor>
  <Slider
    value={7}
  />
</PropsEditor>
```

这将呈现组件以及一个实时编辑器来操作组件上的任何道具。

```react
  <SomeComponent />
```

只会高亮显示语法,但不会渲染组件。

在我的降价文件顶部,我可以导入我在文档中使用的任何组件:

---
imports:
  - import Slider from '../src/slider'
  - import PropsEditor from 'props-editor'
---

这种方式的优点是文档可以像普通的标记一样工作,并且很容易将JSX作为字符串来获取。

为了得到超文本标记语言源,我有一个“查看源代码”

这些步骤是:

  • 单击获取react组件的html
  • 使用棱镜和美化器格式化html
  • 将其插入DOM中

因此,包装react组件并引用节点:

<div ref={(n) => (this.fenceView = n)}>

然后单击在组件下方添加输出,相关位:

import prismjs from 'prismjs';
import beautify from 'xml-beautifier';

const RE_HTML_COMMENTS = /<!--[\s\S]*?-->/g;

removeCodeSource() {
  const existingHtmlCode = this.fenceView.querySelector('.fence-generated-html');
  if (existingHtmlCode) existingHtmlCode.remove();
}

renderCodeSource() {
  const html = this.fenceView.children[0].innerHTML.replace(RE_HTML_COMMENTS, '');
  const fenceCode = beautify(html, '  ');
  const highlightedCode = prismjs.highlight(fenceCode, prismjs.languages.html);
  this.removeCodeSource();
  this.fenceView.insertAdjacentHTML('beforeend',
    `<pre class="fence-generated-html language-html"><code>${highlightedCode}</code></pre>`);
}
 类似资料:
  • 问题内容: 我有一个ASP.NET页和一些自定义类,这些类可获取指定的网页,并返回此页面主体。 但是我需要的-它是DOM html而不是源代码,因为我通过jQuery在DOM上做了一些额外的操作。 问题答案: 这是我发现在运行javascript之后进入呈现的HTML(DOM)的一种解决方案: 将一个名为webBrowser1的WebBrowser控件放在Form1类的Form上。 [Form1.

  • 问题内容: 我需要一个命令行工具(或Javascript / PHP,但我认为命令行是一种方式)来进行渲染并获取URL的渲染内容,但是重要的是我不仅要渲染CSS / Html / images,还要渲染Javascript。 例如,诸如“ renderengine http://www.google.es outputfile.html”之类的命令和网络内容(已解析的html和javascript

  • 这是一个概念性的问题,因为我试图理解在react中处理表格数据的最佳方法,而不使用任何特殊组件或库。 我在子组件中动态创建的html表中有数据。数据来自父组件。有些列具有可编辑的内容,我通过“编辑”按钮触发这些内容,以重新呈现表格的一个版本,该版本包含可编辑列的所有行的内联文本框。 当我更改文本框的内容时,我希望能够单击“保存”按钮并保存所有行。 “保存”和“编辑”按钮不在表中内联,而是位于我的组

  • 在Spring,我找到了一个给定url的MockMVC: 太好了。现在我想看看这将返回的html是什么。我该怎么做?我想要它的字符串表示(即String theHtml=...),这样我就可以解析它并在我的测试中检查它。

  • 我在一个表单上有一个TextField输入,问题是当我在它上键入时,刚刚键入的值的显示/呈现有一种延迟,我想防止这种延迟。 代码:

  • 我有一个要导入页面的组件: 在页面上,我呈现组件