首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >babel + react + jsx呈现奇怪的标记

babel + react + jsx呈现奇怪的标记
EN

Stack Overflow用户
提问于 2015-10-05 19:07:36
回答 1查看 219关注 0票数 0

我用的是react 0.13.3和babel 5.8.26。我注意到它开始呈现奇怪的标记。我在js文件中有这就是

代码语言:javascript
复制
<p className="navbar-text navbar-right dropdown hidden-xs">
    <a className="navbar-link dropdown-toggle" href="#" id="accountddl" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true"><i className="st st-profile st-2"></i></a>
    <ul className="dropdown-menu" aria-labelledby="accountddl">
        <li><a href="#">Action</a></li>
    </ul>
</p>

你可以看到那里的输出。

但是它呈现回来的是

代码语言:javascript
复制
<p class="navbar-text navbar-right dropdown hidden-xs" data-reactid=".0">
    <a class="navbar-link dropdown-toggle" href="#" id="accountddl" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true" data-reactid=".0.0">
        <i class="st st-profile st-2" data-reactid=".0.0.0"/>
    </a>
</p>
<ul class="dropdown-menu" aria-labelledby="accountddl" data-reactid=".0.1">
    <li data-reactid=".0.1.0">
        <a href="#" data-reactid=".0.1.0.0">Action</a>
    </li>
</ul>
<p/>

正如您所看到的,它在呈现ul之前关闭了p标记,最后它附加了一个自关闭的p标记。

如何使ul成为父p标记的一部分?我做错了什么吗?

如果我将p改为div,它将按预期工作- 结果

更新

多亏了那些家伙的评论。我意识到这不是有效的HTML。反应是好的,做好它的工作。因此,当浏览器看到情况时,它决定按照上面所示的方式打破它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 20:13:33

HTML规范定义了如何嵌套标记的规则。在这种情况下:

是:

内容类别:流内容、可触摸内容。 允许内容:措辞内容。

是:

内容类别:流动内容 允许的父元素:任何接受流动内容的元素

这意味着在<ul>元素中不允许使用<p>元素。为了避免这种情况,React和/或浏览器基本上会在DOM中将<ul>拉高一级,并将<p>拆分到它周围,从而得到所看到的结果。

更新

来自新发布的React 0.14的发行说明

当对HTML元素进行无效嵌套时,React现在会警告您,这可以帮助您避免在更新期间出现令人惊讶的错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32956030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档