[reactjs] DOM에서 React.render ()를 여러 번 사용해도 괜찮습니까?

React를 사용하여 DOM 전체에 여러 번 구성 요소를 추가하고 싶습니다. 이 바이올린 은 내가하려는 작업을 보여 주며 오류가 발생하지 않습니다. 코드는 다음과 같습니다.

HTML :

<div id="container">
    <!-- This element's contents will be replaced with the first component. -->
</div>

<div id="second-container">
    <!-- This element's contents will be replaced with the second component. -->
</div>

JS :

var Hello = React.createClass({
    render: function() {
        return <div>Hello {this.props.name}</div>;
    }
});

React.render(<Hello name="World" />, document.getElementById('container'));

React.render(<Hello name="Second World" />, document.getElementById('second-container'));

이 질문을 보았고 위의 작업을 수행하면 React 구성 요소가 서로 간섭 할 위험이 있습니다. 그 질문에 대한 대답은 Django 서버 측을 사용하고 있기 때문에 나에게 옵션이 아닌 서버 측 렌더링을 사용하는 것을 제안합니다.

반면에 React 라이브러리의 인스턴스가 하나만 마운트되어 있기 때문에 (여러 컴포넌트가 React의 자체 인스턴스를 호출하는 것과는 반대로) 내가하고있는 일은 괜찮을까요?

여러 DOM 인스턴스를 사용하는이 방법이 React를 사용하는 좋은 방법입니까?



답변

예, React.render같은 페이지에서 여러 번 호출하는 것은 완벽합니다 . 제안한 것처럼 React 라이브러리 자체는 한 번만로드되지만를 호출 할 때마다 React.render다른 요소와 독립적 인 새 구성 요소 인스턴스가 생성됩니다. (사실 이러한 상황은 페이지의 일부가 사용되어 생성 React.render되고 나머지는 생성 되지 않는 React로 전환하는 과정에있는 사이트에서 드물지 않습니다.)


답변

이 접근 방식은 페이지로드 성능 관점에서 괜찮지 만 다른 단점이 있으며 가능하면 여러 React 루트를 피해야합니다.

  • 다른 React 루트는 컨텍스트를 공유 할 수 없으며 React 루트간에 통신해야하는 경우 전역 DOM 이벤트에 대한 폴 백이 필요합니다.
  • 서스펜스 및 비동기 렌더링과 같은 타임 슬라이싱 과 같은 성능 최적화의 이점이 적습니다 . React 루트 경계를 가로 질러 일시 중단 할 수 없습니다.

더 많은 raeding- https: //github.com/facebook/react/issues/12700


답변