如何在ReactJS中输出文本而不用跨度包装它

在我的基于ReactJS的应用程序中:

var _ = React.DOM; _.span(null, 'some text', _.select(null, ...)); 

问题是:“一些文本”被包裹在DOM中的附加span元素中。 有什么办法可以避免这种行为,只输出原始文本?

要清楚:我想输出

 <span>some text<select>...</select></span> 

 <span><span>some text</span><select>...</select></span> 

更新:现在在React v15(2016-04-06)中已经“修复了” – 现在注释节点被添加在每一段文本的周围,但是它不再包裹在<span>标记中。

我们在这个版本中收到了来自社区的一些惊人的贡献,我们要特别强调Michael Wiencek的 这个拉动请求 。 感谢Michael的工作,React 15不再在文本周围发出额外的<span>节点,使得DOM输出更加清晰。 对于React用户来说,这是一个长期的烦恼,所以把它作为外部的贡献是令人兴奋的。

完整的发行说明。


这是目前React的技术限制; 它将所有浮动文本节点包装在一个范围内,以便它可以为其分配一个ID并稍后返回。 在未来的React版本中,希望我们可以删除这个限制。

你可以硬编码的HTML作为最后的手段。

 <option value={value} dangerouslySetInnerHTML={{__html: value}}></option> 

那么..如果你真的想这样做,并接受你无法访问道具或状态的限制,你可以这样做:

 var Component = React.createClass({ displayName:"Statics", statics: { customRender: function(foo) { return React.renderToStaticMarkup(<div dangerouslySetInnerHTML={{__html: foo.bar }}/>); } }, render: function () { return <div dangerouslySetInnerHTML={{__html: <Component.customRender bar="<h1>This is rendered with renderToStaticMarkup</h1>" />}} /> } }); 

renderToStaticMarkup不会插入任何跨度或react-dataid,而是用于静态服务器呈现。 这样做可能不是一个好主意,但是你去了。

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

检查结果在: http : //learnreact.robbestad.com/#/static

我改变了反应和反应的版本,工作完美

 "react": "^15.0.1", "react-dom": "^15.0.1"