One of my personal projects is built using ReactJS and not compatible with the default adsense code generated by google:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Top -->
<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
     data-ad-slot="XXXXXXXXXX"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

IMPORTANT: Be very careful and read the Adsense TOS. Don’t reload ads mid-visit or otherwise inflate your impressions!

Here’s the component I wound up using:

@Ad = React.createClass
  componentDidMount: ->
    (window.adsbygoogle = window.adsbygoogle || []).push({})

  render: ->
    style =
      display: "inline-block"
      width: @props.width
      height: @props.height

    `(
      <ins
        className="adsbygoogle"
        style={style}
        data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
        data-ad-slot={this.props.slot}
        />
    )`

You’ll need to put the script tag in the html document’s head. It only needs to be included once even if you serve multiple ads:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

Example usage:

<Ad width={728} height={90} slot="XXXXXXXXXX" />

Each time the component is mounted, componentDidMount appends a new object on to window.adsbygoogle, which in turn causes Google to try and fill the next unfilled ad in the DOM.