2014-10-16 5 views
3

다른 구성 요소에 구성 요소를 주입하는 기본 방법은 무엇입니까? 나는 부모 View에 대해서만 View가 알고있는 Object Oriented 어플리케이션 구조를 가지고있다. 모든 구성 요소가 '동적'구성 요소이므로 구성 요소 구조를 미리 알지 못합니다.다른 구성 요소에 구성 요소를 삽입하십시오.

나는 다음과 같은 공유 코드로 두 가지 방법으로 그것을 시도 :

var subView = React.renderComponent(
    <subcomponent />, 
    parentView.getDOMNode() 
); 

렌더링

/** @jsx React.DOM */ 
var component = React.createClass({ 
    render: function() { 
     return (
      <div> 
       .. many elements here .. 
       {this.props.children} 
      </div> 
     ); 
    } 
}); 
var subcomponent = React.createClass({ 
    render: function() { 
     return (
      <div>test</div> 
     ); 
    } 
}); 

var parentView = React.renderComponent(
    <component>.. subelements</component>, 
    document.getElementById('reactContainer') 
); 

1. 여러 부품이 문제는 슈퍼 구성 요소 내부 HTML이 있다는 것이다 주입 된 구성 요소로 대체됩니다. 또한 다른 오류가 발생하고 있습니다. 이런 식으로 반응하는 방식이 아닌 것 같습니다. 단일 renderComponent

또 다른 접근 방식 setProp를 통해

2를 주입 하위는 아이들이 소품 설정하는 것입니다.

parentView.setProps({ 
    children: <subcomponent /> 
}); 

예상대로 작동하지만 몇 가지 단점이 있습니다. 그것은 주입 된 구성 요소로만 자식을 다시 설정합니다. 이 문제를 해결하려면 다음 작업을 수행 할 수 있습니다.

parentView.setProps({ 
    children: [parentView.props.children, <subcomponent />] 
}); 

그러나 이제 childView는 해당 부모의 자식을 관리합니다. 하지만 parentView에있는 메소드로이를 추출 할 수 있습니다.

또 다른 단점은 뷰 깊이가 2보다 깊을 때 rootView 만 React.renderComponent을 통해 렌더링되기 때문에 React 구성 요소에 대한 참조가 사라져서 rootview에서 setProps 만 수행 할 수 있다는 것입니다.

모든보기에 대해 React.renderComponent이 필요하다고 생각하지만 부모에게 주입하는 방법을 알지 못합니다. 대부분의 경우

+0

당신의 모델을 완전히 이해할 수는 없지만, 당신이 일을하는 관용적 인 반응 방식과 싸우고있는 것처럼 보입니다. 아마도 다시 문서를 읽고 다시 시작해야합니다 :( 아이들을 삽입 할 필요가 없으며 소품으로 넘겨서는 안됩니다. 아이들을 다루는 방법은 http://facebook.github.io에서 확인할 수 있습니다. /react/docs/multiple-components.html – edoloughlin

+0

나는 여기에서하려고하는 것에 대해서도 매우 혼란 스럽다. 자식 컴포넌트를 부모 안에 넣기 위해서는 부모의'render' 함수 안에서 자식을 호출하면된다. 왜 당신이 소품을 통해 어린이를 삽입하려고하는지는 완전히 저쪽에 있고, React로 일반적으로 시도해야하는 것이 아닙니다. –

답변

1

(당신이 당신의 예에 표시 등), 다른 구성 요소에 구성 요소를 전달하는 좋은 방법은 특별한 아이들 소품을 사용하고 있습니다 :

var component = React.createClass({ 
    render: function() { 
     return (
      <div> 
       .. many elements here .. 
       {this.props.children} 
      </div> 
     ); 
    } 
}); 

here

를 읽을 수 있습니다
관련 문제