2017-02-16 4 views
1

내 응용 프로그램에서 웹 구성 요소를 사용하고 있습니다. 그리고 웹 구성 요소에서 반응 구성 요소를 삽입해야합니다. 웹 구성 요소에 그림자 DOM이 있습니다. 다음을 사용하여 반응 구성 요소를 렌더링하려고하면 오류가 발생합니다.그림자 DOM 및 ReactJS

comp = React.createElement(ReactElem, { 
    config: config, 
    onRender: handleRender 
}); 

ReactDOM.render(comp , self.shadowRoot.querySelector('#app1')); 

오류

target container is not a dom element 

나는 웹 구성 요소의 API의 content을 사용하려고하지만 그것은 오히려 구성 요소의 내부 상단에 렌더링됩니다. React 구성 요소를 그림자 DOM 내부에서 렌더링하도록 만드는 방법은 무엇입니까?

+0

가 생성 된 HTML을 얻고있다로드, 또는 내가 여기서 뭔가를 놓치고 수있는 그림자 DOM을 사용하는 경우에도? – juancab

+1

"app1"은 무엇입니까? ''# app1 "'을 의미하지 않습니까? – Supersharp

+0

@Supersharp 웹 구성 요소입니다. –

답변

0

웹 구성 요소의 그림자 DOM 안에 삽입하려면 먼저 구성 요소 (예 : querySelector)를 포함하고 그림자가 포함 된 부분 (shadowRoot)을 선택합니다. 간단한 예 :

// 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>

+0

문제는'react'는 클릭이 작동하지 않는 것처럼 모든 조작을 수행 할 수 없습니다. 또한 컴포넌트의 인스턴스가 여러 개있을 수 있으며 모든 장소를 호출해야하는이 방법이있을 수 있습니다. – thecodejack

+0

'onClick'이 나를 위해 일하고 있습니다. 내 대답을 업데이트했습니다. "모든 장소로 전화 걸기"란 무엇을 의미합니까? 'ReactDOM'으로 매번 렌더링해야한다는 말입니까? –

+0

감사합니다. 나는 작은 실수를 저질렀다. 내 DOM은 그림자와 슬롯 요소에서 2 레벨 아래로 한 곳에서만 언급되었습니다. – thecodejack