从文档:
JSX 根节点的最大数量
目前,在一个组件的渲染中,你只能返回一个节点;例如,如果您有一个要返回的 div 列表,则必须将组件包装在 div、span 或任何其他组件中。
别忘了 JSX 会编译成普通的 js;返回两个函数并没有真正的语法意义。同样,不要将一个以上的孩子放在三元组中。
上面的解释说“当前”,这表明一个组件可能会返回一个导致两个节点而不是一个节点的函数。这只是技术限制,还是融入了哲学?
我是如何想到这个问题的:我在尝试使用 React 渲染 Bootstrap 菜单的情况下,Bootstrap 使用子选择器,而不是后代选择器,这很有意义。
旁白:我如何解决我的特定问题:
我最感兴趣的是 React 的架构,但如果你好奇这就是我的情况。
目前在 Bootstrap 中,您可以创建一个下拉菜单:
<li role="presentation" class="dropdown pull-right">
<a class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="true"> Menu <span class="caret"></span> </a>
<div id="macroMenu" class="react-component">
<ul class="macroInsertion dropdown-menu" role="menu">
<li>
<form class="navbar-form navbar-left" role="search">
<div class="form-group">
<input type="text" class="form-control search-filter" placeholder="Search" />
</div>
</form>
</li>
<li>
<a href="#">Menu 1</a>
</li>
<li>
<a href="#">Menu 2</a>
</li>
<li class="divider"></li>
<li>
<a href="#">Menu 3</a>
</li>
</ul>
</div>
</li>
默认的 Bootstrap 样式表有像 .pull-right > .dropdown-menu 和 .open > .dropdown-menu 这样的选择器,如果你在容器和包含之间插入单个元素,它们就不起作用。这是有道理的,因为它可能更快,并且 Bootstrap 有时可能会处理双嵌套选择器,但它破坏了我们的系统,因为它在中间有 .react-component。
就我而言,我手动找出了 .react-component 破坏了什么,并创建了新样式来解决缺失的行为。