How to render a HTML comment in React? How to render a HTML comment in React? reactjs reactjs

How to render a HTML comment in React?


This is what I have ended up with in one of my recent projects:

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;

So you can use it like this:

<A>    <B></B>    <ReactComment text="<fragment>" />        <C></C>        <D></D>     <ReactComment text="</fragment>" />    <E></E></A>


Here's another novel approach if you need this to work with SSR.

Here's a MaxWidth component I am using with my react-based email tool called Myza.

import ReactDOMServer from 'react-dom/server'export const MaxWidth = ({ maxWidth = 0, className, children }: IMaxWidthProps) => {  const renderedChildren = ReactDOMServer.renderToStaticMarkup(    <div className={className} style={{ maxWidth: `${maxWidth}px`, margin: '0 auto' }}>      {children}    </div>  )  return <div dangerouslySetInnerHTML={{    __html: `    <!--[if mso]><center><table><tr><td width="${maxWidth}"><![endif]-->    ${renderedChildren}    <!--[if mso]> </td></tr></table></center><![endif]-->  ` }}  />}


You can do it with the following component, it is simple and functional but it has the drawback of having to wrap your comment in a HTML node i.e.a "div" because it makes use of the dangerouslySetInnerHTML attribute:

    const ReactComment = ({ text }) => {  return <div dangerouslySetInnerHTML={{ __html: `<!-- ${text} -->` }}/>}

Then, you use it like so:

<ReactComment text={'My beautiful HTML comment'}/>