I am using web components in my application. And in a web component, I need to insert a react component. Web Component has Shadow DOM. When I try to render the react compone
If you want to insert it inside the shadow DOM of a web component, first select the component (e.g. with querySelector
) and then its containing shadow (shadowRoot
). Simplified example:
// Create React Element.
class Example extends React.Component {
onClick() {
console.log('Shadow!')
}
render() {
return(
<div onClick={this.onClick}>Hello World!</div>
);
}
}
// Create web component with target div inside it.
const container = document.createElement('app');
document.body.appendChild(container);
// Add shadow root to component.
const shadow = document.querySelector('app').createShadowRoot({ mode: 'open' });
// Select the web component, then the shadowRoot.
const target = document.querySelector('app').shadowRoot;
ReactDOM.render(<Example />, target);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>