Use <code> or similar tags in ReactJS using JSX

jackncoke picture jackncoke · Jan 21, 2016 · Viewed 12.1k times · Source

I am trying to use ReactJS with JSX to create a proof of concept for a styleguide.

I wanted to be able to display the raw html of how to call on components doing this. JSX is ignoring my <code> tags and rendering out the component

This is what i have tried so far Display HTML code in HTML

<blockquote>
  <pre>
    <code>
      <VideoPlayer 
        ref="videoplayer" 
        preload={this.props.preload} 
        classes={this.props.classes} 
        videoID={this.props.videoID}
        controls="controls" 
      />     
    </code>
  </pre>
</blockquote>

I was surprised to see it render.

Answer

Yaakov Belch picture Yaakov Belch · Sep 8, 2016

In your example, react interprets your code as JSX. You need to use JSX-save coding. The easiest is to include a string literal:

<pre>{`
  <VideoPlayer 
    ref="videoplayer" 
    preload={this.props.preload} 
    classes={this.props.classes} 
    videoID={this.props.videoID}
    controls="controls" 
  />
`}</pre>

Explanation: Parsing your input starts at <pre> in JSX mode. The opening bracket { switches the parser into JavaScript mode to include computed values into the output. Now the backquote ` switches the parser into string-parsing mode. This can span multiple lines. Inside string parsing mode, JSX-special characters <>{} are not special anymore. But you must escape the two characters that are special inside multi-line strings: The back quote ` and the dollar sign $.

After parsing your coding, the final back quote switches back to JavaScript mode, the following } switches back to JSX mode and </pre> completes your element.

React will automatically convert your string into safe HTML.