webpack을 사용하여 반응이없는 애플리케이션에서 반응 구성 요소를 사용하고 있습니다. 아이디어는 모든 DOM에서 마운트 및 마운트 해제 할 수 있도록 이들을 내보내는 것입니다. 나는 번들로 수출하고있어 웹팩 설정에서비 반응 애플리케이션에서 React 구성 요소를 마운트/마운트 해제 할 때 DOM 노드 참조 유지
import React from 'react'
import MyComponent from '/path/to/MyComponent'
import ComponentMounter from '/path/to/ComponentMounter'
let componentMounter = new ComponentMounter(<MyComponent />)
export let mount = componentMounter.mount
export let unmount = componentMounter.unmount
:
<script type="text/javascript" src="<?php echo base_url('assets/javascripts/build/component.js') ?>"></script>
<button onclick="showComponent()" />show component</button>
<button onclick="hideComponent()" />hide component</button>
<div id='mainContainer'></div>
<script >
function showComponent() {
MyComponent.mount(document.getElementById('mainContainer'))
}
function hideComponent() {
MyComponent.unmount()
}
</script>
이것은 웹팩 진입 점입니다 :
이
내가 구성 요소를 테스트하고있어 HTML 페이지입니다 사용하여 라이브러리 :output: {
path: './assets/javascripts/build/',
filename: 'component.js',
libraryTarget: 'var',
library: 'MyComponent'
}
ComponentMounter 클래스 :
import ReactDOM from 'react-dom'
class ComponentMounter {
constructor(component) {
this.component = component
}
mount = (element) => {
// This renders the react 'component', mounting it in the DOM 'element'
this.element = ReactDOM.render(this.component, element)
}
unmount =() => {
// This unmounts the react 'component', removing the DOM 'element'
ReactDOM.unmountComponentAtNode(this.element)
}
}
export default ComponentMounter
잘하면 내가 뭘하려고하는지 알 수 있습니다. 쇼 버튼을 클릭하면 구성 요소가 문제없이 마운트됩니다.
하지만 마운트를 해제하려고 할 때, 내가이 경고를 얻을 같은 요소가 유효한 DOM 요소 아닌 것 같다
invariant.js:38 Uncaught Invariant Violation: unmountComponentAtNode(...): Target container is not a DOM element.
어떻게에 장착 된 반작용 구성 요소에 대한 참조를 유지할 수 있습니다 필요한 경우 쉽게 마운트 해제 할 수 있도록 ComponentMounter 객체 내의 DOM 노드?
당신의 대답은 좋은 방향으로가는 것 같습니다. (ReactDOM.render'에 대한 문서를 잘못 읽었습니다.)하지만 또 다른 문제가 있다고 생각합니다 : 'this.element'의 값이'undefined '일 때 'unmount' 함수가 호출됩니다. 나는'mount'와'unmount' 함수가 호출 될 때 디버거 중단 점을 추가하고'this.element '의 값을 반향하여 이것을 검사 할 것입니다. 재미있는 점은,'this.component'에서도 발생한다는 것인데,'mount' 함수를 호출 할 때'undefined' 인 것처럼 보이지만, 어떻게 든 구성 요소는 잘 탑재됩니다. –
사실, 신경 쓰지 마세요. 그것은 무관 한 문제였습니다. 당신의 대답은 옳았습니다. 감사! –