如何在React中呈现HTML评论?
目前渲染方法只能返回一个元素/组件。 看这里
在该票证下的讨论中,有人建议在HTML注释中包装从React组件返回的多个元素,以便浏览器忽略包装组件,例如:
<A>
<B></B>
<Fragment>
<C></C>
<D></D>
</Fragment>
<E></E>
</A>
会呈现给:
<a>
<b></b>
<!--<fragment data-reactid="">-->
<c></c>
<d></d>
<!--</fragment>-->
<e></e>
</a>
但是如何真正创建一个只呈现HTML注释的组件? 换句话说,上面例子中'fragment'组件的渲染函数是怎么样的?
这是我最近在其中一个项目中结束的事情:
import React, {Component, PropTypes} from 'react';
import ReactDOM from 'react-dom';
class ReactComment extends Component {
static propTypes = {
text: PropTypes.string,
trim: PropTypes.bool
};
static defaultProps = {
trim: true
};
componentDidMount() {
let el = ReactDOM.findDOMNode(this);
ReactDOM.unmountComponentAtNode(el);
el.outerHTML = this.createComment();
}
createComment() {
let text = this.props.text;
if (this.props.trim) {
text = text.trim();
}
return `<!-- ${text} -->`;
}
render() {
return <div />;
}
}
export default ReactComment;
所以你可以像这样使用它:
<A>
<B></B>
<ReactComment text="<fragment>" />
<C></C>
<D></D>
<ReactComment text="</fragment>" />
<E></E>
</A>
编辑:对于那些认为这个答案有用的人,请结束这个答案!
发布的问题不是在React中要求评论风格!
使用大括号,以便您可以使用javascript注释/* */
。
<a>
<b></b>
{/*<fragment data-reactid="">*/}
<c></c>
<d></d>
{/*</fragment>*/}
<e></e>
</a>
您计划执行此操作的方式不适用于普通的vanilla React解决方案。 但是,您可以定义一个自定义Web组件,将其转换为HTML注释并从React包装器中返回。 这里实现了一个示例组件。 要在React中使用,请参阅此URL。
更新19/01/2017
所以这是未经测试的理论,但是Web组件可以是类似的 -
```
/**
* <react-comment-sentinel> Web Component
*
* @usage
* <react-comment-sentinel sentinel="fragment"><div>Hello there!</div></react-comment-sentinel>
* @result
* <!-- <fragment> --><div>Hello there!</div><!-- </fragment> -->
*/
var proto = Object.create(HTMLElement.prototype, {
name: { get: function() { return 'React HTML Comment'; } },
createdCallback: { value: function() {
/**
* Firefox fix, is="null" prevents attachedCallback
* @link https://github.com/WebReflection/document-register-element/issues/22
*/
this.is = '';
this.removeAttribute('is');
} },
attachedCallback: { value: function() {
var tag = this.attributes("sentinel");
this.outerHTML = '<!-- <' + tag + '> -->' + this.innerHtml + '<!-- </' + tag + '> -->';
} }
});
document.registerElement('react-comment-sentinel', { prototype: proto });
```
请注意,内部孩子是纯html,而不是React。 但是,您可以尝试增强代码以支持React组件。
链接地址: http://www.djcxy.com/p/52051.html上一篇: How to render a HTML comment in React?
下一篇: Loop in react