【问题标题】:Render HTML without the extra "data-reactid" DOM attribute in React.js?在 React.js 中渲染 HTML 时没有额外的“data-reactid”DOM 属性?
【发布时间】:2016-02-08 16:07:28
【问题描述】:

所以,我在我的一个 react.js 文件中做了这样的事情:

 render: function() { 
    var stuff = this.props.stuff;

    function getHtmlForKey(key_name, title) {
        var key_name = key_name.toLowerCase();
            return Object.keys(thing).filter(function(key) {
                return key && key.toLowerCase().indexOf(key_name) === 0;
            }).map(function(key, index) {
                var group_title = index === 0 ? title : '';
                if(profile[key] != null && thing[key] != "") {
                    return (
                        <span>
                        {group_title ? (
                            <li className="example-group-class">{group_title}</li>
                        ) : null }
                        <li key={key} className="example-class">
                            {thing[key]}
                        </li>
                        </span>
                    );
                }    
            }, this);
    }

    /** Grouping by keyword **/
    var group1 = getHtmlForKey('stuff1', 'Group Title 1');

    /** Return Facecards **/
    if (stuff) {
        return (
            <div className="col-md-6">
                <div className="media">
                    <div className="pull-left">
                        <a href="#" onClick={this.open}>
                            <img src={this.props.stuff} className="media" />
                        </a>
                    </div>
                    <div className="top">
                        {group1}
                    </div>
       }
}

当它渲染时,它会输出如下内容:

  <li class="example-group-title" data-reactid=".0.0.2.0.$2083428221.0.1.0:0.0">Group Title</li>

在我的另一个 react.js 文件中,我有:

    var StuffApp = require('./components/StuffApp.react');

    ReactDOM.render(
    <StuffApp />,
     document.getElementById('main-content')
    );

如何呈现 HTML,使其不包含所有额外的 DOM 属性标记(即 data-reactid)?我只是想尝试保存一些位,你知道吗?我一直在阅读与https://facebook.github.io/react/docs/top-level-api.html ReactDomServer 相关的这篇文章,但想知道是否有更简单的方法?如果没有,我将如何整合它?

【问题讨论】:

  • 您是在服务器上使用react 渲染页面然后传输它吗?你为什么?
  • 嘿@Qwertiy - 我是 react.js 的新手,所以我不确定你的意思 - 你能详细说明一下吗?
  • 你的渲染是服务器端还是客户端?
  • 我们正在渲染客户端
  • 这些 id 有什么问题?

标签: javascript reactjs


【解决方案1】:

您要查找的方法是ReactDOM.renderToStaticMarkup

来自docs

类似于 renderToString,除了它不会创建 React 内部使用的额外 DOM 属性,例如 data-react-id。如果您想将 React 用作​​简单的静态页面生成器,这很有用,因为剥离额外的属性可以节省大量字节。

这只有在您在服务器上渲染时才会有所不同。此外,此标记与 React 不兼容,因此它仅对仅显示组件有用。

但是,你的这句话让我很困惑:

如何呈现 HTML,使其不包含所有额外的 DOM 属性标记(即 data-reactid)?我只是想试着节省一些,你知道吗?

如果你想节省比特,你不要在客户端(这是 React 运行的地方),你在服务器上这样做,这样你就可以将更少的比特传输到客户端。一旦应用程序在客户端的浏览器上运行,您就不必担心这些 DOM 属性占用的额外内存(实际上这是您要节省的唯一部分)。

【讨论】:

  • 所以除非我在服务器上(我可以使用这些方法),否则我真的不能删除那些反应 ID?或者换一种方式问,如果我在客户端,是否有任何反应方法可以帮助删除它?只是好奇
  • 如果你使用ReactDOM.render,你不能删除它。如果你使用ReactDOM.renderToStaticMarkup(它返回一个字符串),你必须自己设置目标元素的innerHTML,这将是一个纯静态元素,这意味着你将失去React的所有好处。
【解决方案2】:

别担心 - 从 React 版本 0.15.0-alpha.1 开始,根节点上只有 data-reactroot 属性。

【讨论】:

  • 是的......即使我只对一个属性感到困惑!我到处都在搜索..我错过了什么吗:-)
猜你喜欢
  • 2013-07-09
  • 2017-03-31
  • 1970-01-01
  • 2018-04-24
  • 2012-11-03
  • 2019-09-24
  • 2014-08-17
  • 2014-10-08
  • 2019-06-13
相关资源
最近更新 更多