Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以在react from html中创建目录_Javascript_Reactjs - Fatal编程技术网

Javascript 是否可以在react from html中创建目录

Javascript 是否可以在react from html中创建目录,javascript,reactjs,Javascript,Reactjs,我有一个文档,想创建一个目录 <h1>heading 1</h1> <section>content</section> <h2>heading 2</h2> <section>content</section> <h2>heading 2</h2> <section>content</section> <h3>heading 3</h

我有一个文档,想创建一个目录

<h1>heading 1</h1>
<section>content</section>
<h2>heading 2</h2>
<section>content</section>
<h2>heading 2</h2>
<section>content</section>
<h3>heading 3</h2>
<section>content</section>
<h2>heading 2</h2>

标题1
内容
标题2
内容
标题2
内容
标题3
内容
标题2
所以所有的h2和h3都应该嵌套在h1中,所有的h3都嵌套在h2中。
我可以在javascript中实现这一点,在javascript中我使用DOM节点,但无法绕过react中的一种方式,因为它不鼓励DOM操作

在react中,您应该创建对该节点的引用,并调用
nodeRef.current.querySelectorAll(“h2,h3,h4,h5,h6”)
来检索该节点中的标题。这将是获取所需数据的最佳方式。您并不是在操纵DOM,而是在抓取包含的节点。如果您使用的是与hooks兼容的react版本,我建议将其作为引用容器节点的最简单方法

一旦有了这些数据,您就可以为节点数据创建一个树,如果您想在目录的嵌套中显示它,这是非常必要的

我为这个设计了一个钩子。您可以选择或使用

这个钩子只生成目录所需的数据,但自述文件对如何呈现它有一个明确的定义


生成树的算法不够简单,无法处理堆栈溢出响应。如果你有更简单的方法,请告诉我

在React中,您应该创建对该节点的引用,并调用
nodeRef.current.querySelectorAll(“h2,h3,h4,h5,h6”)
来检索该节点中的标题。这将是获取所需数据的最佳方式。您并不是在操纵DOM,而是在抓取包含的节点。如果您使用的是与hooks兼容的react版本,我建议将其作为引用容器节点的最简单方法

import { renderToStaticMarkup } from 'react-dom/server';
import ReactHtmlParser from 'react-html-parser';

const regex = new RegExp(`(?<=<h\\d>)(.*?)(?=<)`,'g')
一旦有了这些数据,您就可以为节点数据创建一个树,如果您想在目录的嵌套中显示它,这是非常必要的

我为这个设计了一个钩子。您可以选择或使用

这个钩子只生成目录所需的数据,但自述文件对如何呈现它有一个明确的定义

生成树的算法不够简单,无法处理堆栈溢出响应。如果你有更简单的方法,请告诉我

从'react dom/server'导入{renderToStaticMarkup};
import { renderToStaticMarkup } from 'react-dom/server';
import ReactHtmlParser from 'react-html-parser';

const regex = new RegExp(`(?<=<h\\d>)(.*?)(?=<)`,'g')
从“react html parser”导入ReactHtmlParser; const regex=new RegExp(`(?
import{renderToStaticMarkup}来自'react dom/server';
从“react html parser”导入ReactHtmlParser;

const regex=new RegExp(`(?您可能可以将html文档解析为字符串,然后呈现为JSX。有许多npm库可以为您完成此操作。好的。我曾想过将文档作为字符串循环并检索h1标记,但他认为这会很慢,因为文档很长。它可能比您想象的要快。您能否详细说明React dis的含义鼓励DOM操作。我的意思是,react在向其虚拟DOM添加元素时喜欢更新状态,而不是使用UseRef。您可能可以将html文档解析为字符串,然后呈现为JSX。有很多npm库可以为您执行此操作。好的。我想过将文档作为字符串循环并检索h1标记但是s认为它会很慢,因为文档很长。它可能比你想象的要快。你能详细说明一下React阻止DOM操作是什么意思吗?我的意思是,React在向其虚拟DOM添加元素时喜欢更新状态,而不是使用UseRef。我使用了regex、RenderStaticMarkup和ReactHtmlParser。我使用了RenderStaticMarkup t convert html to string、regex识别转换字符串中的标题标记和ReactHtmlParser将html字符串转换为JSXi使用regex、RENDERTOSTICTMARKUP和ReactHtmlParser。我使用RENDERTOSTICTMAKUP t convert html to string、regex识别转换字符串中的标题标记和ReactHtmlParser将html字符串转换为JSX