Skip to content

Commit f554998

Browse files
authored
docs: portal 추가
1 parent 55e8324 commit f554998

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

portal/chaeeun037/README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# REACT PORTAL
2+
3+
### Why?
4+
5+
하위 컴포넌트는 부모 컴포넌트의 css 구성 요소를 상속받기 때문에 상위 컨테이너에서 시각적으로 분리되어야 하는 경우에 사용된다.
6+
7+
8+
9+
## Portal?
10+
11+
부모 컴포넌트의 DOM계층 구조 바깥에 있는 DOM 노드로 자식을 렌더링한다.
12+
13+
[예시]
14+
15+
```react
16+
ReactDOM.createPortal(child, container)
17+
```
18+
19+
20+
21+
## 사용법
22+
23+
부모 컴포넌트에서 다이얼로그, 호버 카드, 툴팁과 같이 시각적으로 튀어나오도록 보여야 하는 경우에 유용하게 사용할 수 있다.
24+
25+
**[예시] 기존 방식**
26+
27+
```react
28+
render() {
29+
// React는 새로운 div를 마운트하고 그 안에 자식을 렌더링합니다.
30+
return (
31+
<div>
32+
{this.props.children}
33+
</div>
34+
);
35+
}
36+
```
37+
38+
**[예시] Portal 사용**
39+
40+
```react
41+
render() {
42+
// React는 새로운 div를 생성하지 *않고* `domNode` 안에 자식을 렌더링합니다.
43+
// `domNode`는 DOM 노드라면 어떠한 것이든 유효하고, 그것은 DOM 내부의 어디에 있든지 상관없습니다.
44+
return ReactDOM.createPortal(
45+
this.props.children,
46+
domNode );
47+
}
48+
```
49+
50+
### 주의사항
51+
52+
웹 접근성과 관련해서 키보드 포커스 관리가 중요하므로 특히 모달 다이얼로그의 경우 모든 상호작용을 확인해야 한다.
53+
54+
55+
56+
## 이벤트 버블링
57+
58+
Portal은 React 트리 내에 존재하므로 DOM 트리에서의 위치와 관계없이 다른 자식들과 같이 동작한다.
59+
60+
따라서 Portal 내부에서 발생한 이벤트는 DOM 트리에서 상위 노드가 아니더라도 React 트리에서 상위 노드라면 전파될 것이다.
61+
62+
63+
64+
## Context vs Portal
65+
66+
Context는 최상위 레벨에서 직접 렌더링해야하지만 Portal은 계층 구조의 모든 곳에서 DOM 요소를 렌더링 할 수 있다.
67+
68+
Portal은 가끔씩 튀어나오는 모달 컴포넌트 등에 유용하고, Context는 데이터를 모든 노드에 전파해야 하기 때문에 Portal보다 성능 이슈가 있을 수 있고 i18n과 같은 다국어 적용 등의 앱 전체적으로 사용해야 하는 부분에 유용하다.
69+

0 commit comments

Comments
 (0)