javascript - 使用react html-react-parser或innerHTML解析html字符串?哪个更快?

标签 javascript reactjs next.js

我从后端收到 html 字符串。我正在使用react-html-parser 解析html 字符串。但包的导入大小为174kb。我可以使用 innerHTML 做同样的事情。请引用下面的代码。我在 useEffect 中设置 innerHTML,以便在 text 更改时反射(reflect)更改。

  • 使用innerHTML
  useEffect(() => {
    document.getElementById(`text-${_id}`).innerHTML = text;
}, [text]);

  • 使用解析器(我可以在 return 语句本身中完成)
function SomeComponent({_id}) {
return (
    <div className="list-group-item mb-3">
      <div id={`text-${_id}`}>
        {parser(text)}
      </div>
    </div>
)}

我使用 importCost 扩展查看了导入大小。附件。对你来说,哪种方法会更快。值得使用 html-react-parser 吗?

enter image description here

最佳答案

React 是一个 JavaScript 库,它内部使用 JavaScript,所以它会比较慢。

如果只是设置一个html值,可以使用.innerHTML,但是有security considerations其用途。

为了避免注入(inject)攻击(如 XSS),我们应该在插入时清理 html(即使数据库存储清理过的 html)。

使用类似 sanitize-html 的 sanitizer 或react-sanitize-html像这样

import SanitizedHTML from 'react-sanitized-html';

function SomeComponent({_id}) {
return (
    <div className="list-group-item mb-3">
      <div id={`text-${_id}`}
        <SanitizedHTML html={ text} />
      </div>
    </div>
)}

html-to-react 解析器(内部调用 html-to-dom-parser)是 react 特定的,具有不同的用途。如果你看一下它的签名,

/**
 * Converts HTML string to React elements.
 *
 * @param {string} html - HTML string.
 * @param {object} [options] - Parser options.
 * @param {object} [options.htmlparser2] - htmlparser2 options.
 * @param {object} [options.library] - Library for React, Preact, etc.
 * @param {Function} [options.replace] - Replace method.
 * @returns {JSX.Element|JSX.Element[]|string} - React element(s), empty array, or string.
 */
function HTMLReactParser(html, options)

你可以看到它返回React元素、空数组或字符串


请注意 Element.innerHTML不是 DOM 解析。这不一样。 AS 根据 MDN 文档,

The Element property innerHTML gets or sets the HTML or XML markup contained within the element.

关于javascript - 使用react html-react-parser或innerHTML解析html字符串?哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74001982/

相关文章:

reactjs - fullcalendar - NextJS - 动态导入不显示日历

javascript - 如何使用 React 检查远程源是否可用?

php - 我的广播电台网站的 JSON 代码?

javascript - 如何在类组件中处理从父级事件处理程序传递到子级事件处理程序的附加参数

javascript - 如何在 React 中为 react-helmet 做 meta 标签和标题单元测试?

javascript - react | TypeError : this. state.cars.map 不是一个函数

reactjs - NextJS Googlebot 发生意外错误

javascript - 将图像添加到 svg

javascript - 使用 jQuery 和 AJAX 更新 SQL 时出现问题

amazon-web-services - 如何在 NextJS 中设置 AWS-SDK 凭证