본문 바로가기

프로그래밍 공부내용/리액트(React)

Create portal

- 간단 요약

 

모달창같은 경우 

 

 

리액트에서 제공하는 Create Portal을 이용하면 좋다는 피드백이 있어서 찾아보았다.

 

 

사용방법은 매우 쉬웠는데

 

 

return 해줄 컴포넌트를

 

ReactDOM.createPortal() 함수로 감싸주기고 2번째 인자로

 

document.body 를 넣어주면 된다.
 

-------------------------------------

 

- DETAILS

 

리액트 v16에서 도입 됐는데,

 

사실 그냥 구현해도 되는걸 좀 편리하게 빼놓은 것에 불과하다.

 

공식문서상 설명은 이렇다.

ReactDOM.createPortal(child, container

첫 번째 인자(child)는 엘리먼트, 문자열, 혹은 fragment와 같은 어떤 종류이든 렌더링할 수 있는 React 자식입니다.

두 번째 인자(container)는 DOM 엘리먼트입니다.

 

 

두번째 DOM인자로 body를 넣어준 이유는 아래와 같다.

(진짜 코드는 아니고 portal로 modal을 만들면 브라우저 상에서는 저런 식이 됨)

<!DOCTYPE html>
<html lang="en">

<head>
	<title>React App</title>
</head>

<body>
	<noscript>
		You need to enable JavaScript to run this app.
	</noscript>
	<div id="root"></div>
	<div id='modal'></modal>
</body>

</html>

와 같이 들어간다.

 

 

원래라면 App이 다 <div id='root'>의 자식으로 들어가는데

 

portal을 쓰면 우리가 지정해준 document.body에 들어가서 저렇게

 

root와 부모자식이 아니라 형제로 modal이 생성된다.

 

 

 

이름이 portal인 이유도 여기서 나오는데 root에 있는 자식요소들을

 

포탈을 뚫어서 <div id='modal'>에서도 쓰도록 만들어주기 때문이다!!

 

 

 

 

https://velog.io/@dfd1123/react-create-portal-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 

여기 보면 코드를 잘 설명해주셨고,

 

다른기능은 다 제외하고 portal을 만드는 가장 골조가 되는 코드로만든 내 코드도 첨부한다.