TL; DR = "Portals
Context
및 다른 목적을 해결 한 어떠한 수준 DOM을 주입하는 등의 모든 수준에서 소도구를 주입하는 것이다. Context
은 Portals
을 모방 할 수 있지만 Portals
은 코드 냄새를 도입하지 않고 Context
을 모방 할 수 없습니다.
참고 : 다음은 두 가지 개념에 대한 나의 이해를 바탕으로합니다. 이에 대한 의견이나 수정 사항이 있으시면 언제든지 답을 수정하십시오.
이름에서 알 수 있듯이 Portals
은 구성 요소 트리 계층 구조에있을 필요가없는 구성 요소를 렌더링 할 수있는 문법입니다. 이것은 Modals
, Popovers
또는 트리의 특정 위치에 스티칭해야하는 모든 구성 요소와 완벽하게 동일합니다.
Context
은 부모로부터 원하는 구성 요소까지 소품을 전달하지 않고 다양한 형제 및 하위 구성 요소와 통신해야합니다. 물론 이것은 중요한 기능이지만 실험적 단계에 머물러있는 이유는 중앙 집중식 관리를 위해 event-emitters
과 Redux
, MobX
을 사용할 수 있기 때문입니다.
내가있는이 위대한 기사
COMPONENT COMMUNICATION
포털 및 상황에 맞는 도움말을보고 할 수 있습니다 i18n
에 대한 사용 사례는 구성 요소에 통신을 많이 필요로 가정하고 이런 종류의 의사 소통을 달성했지만 차이점이 있습니다. 포털은 모든 수준에서 DOM을 렌더링하거나 삽입 할 수 있으며 Context는 하위 구성 요소 트리의 모든 수준에서 소품을 삽입 할 수 있습니다.
당신은 항상 Portals
가 Context
를 사용 할 수 있습니다 무엇을 달성 할 수 있지만 Portals
이 Context
기능을 모방 할 수 있다고 생각하지 않습니다.
는 EG :이 같은 뭔가가 Context
을 사용하여 할 Portals
모방하기 위해 수행 할 수 있습니다. 어디서 Portals
AFAIK로 DOM 노드 ReactDOM.createPortal(child, container)
보낼 수 있습니다. 기능을 구현할 수있는 방법이있을 수는 있지만 분명히 코드 냄새가 날 것입니다.내 경우
class Parent extends React.Component {
getChildContext() {
return {
renderModal: this.renderModal
}
}
renderModal = (children) => {
this.setState({
open: !this.state.open,
injectableChildren: children
})
}
render() {
this.state.open
?
<div>
{this.state.injectableChildren}
</div>
:
null
// JSX
}
}
class SomeSibling extends React.Component {
static contextTypes = {
renderModal: React.PropTypes.func
}
handleOnClick = (event) => {
this.context.renderModal(renderableChildJSX);
}
renderableChildJSX =() => (
<div>
YAY I AM GETTING RENDERED AT THE ROOT
</div>
)
render() {
return(
<div onClick={this.handleOnClick}>
</div>
)
}
}
, 나는 인해 React
문서가 항상 실험적인 기능이 있다고 언급하고 본격적인이 기능을 사용하는 반복 경고는 사실이 유연성도 불구 Context
를 사용 두려워했다. 내 생각에 React는이 기능을 안정화 시키거나 두 가지 방향으로 갈 수있는 위험 인 React 코드베이스를 완전히 긁어 모으고 있습니다.
결론 : IMO, 거기에 Portals
가 현재 상태이고 그것을 해결하려고하는 문제가 Context
가 내장 된 것과 완전히 다른이며이 Context
가능성이되지 될 수있는 유일한 이유 event-emitters
를 사용하는 것이 좋습니다.
안녕하세요.하지만 반응 문서의 포털에서 언급했듯이 해당 포털은 구성 요소의 정규 자식처럼 포털에서 사용할 수 있습니다. 이런 식으로 소품을 반응 계층 구조의 어떤 위치로 보낼 수 있습니다. 당신은 그것이 문맥을 좋아하는 것 같다고 생각하지 않습니까 ?? – stack26
하지만 부모님에게서 4 학년 자녀에게 소품을 어떻게 보낼 수 있습니까? 세 번째 자식도' '를 렌더링하는 동안 부모의 렌더링 메소드에서 네 번째 자식' '을 언급하지 않는 한. 포털을 사용하여 소품을 소통하는 것이 좋지 않은 이유를 설명하기 위해 적절한 사례를 제시 할 수 없었지만 유스 케이스를 만난 경우 언제든지 답변에 추가하십시오. –