일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SQL
- flexbox
- hoisting
- BIND
- useContext
- reactPortals
- useState
- realDOM
- mysql
- 리액트작동원리
- useEffect
- 재귀함수
- CSS
- virtualDOM
- 프로그래머스
- React
- eventloop
- useCallback
- 드림코딩
- 비제어컴포넌트
- MariaDB
- useImperativeHandle
- useReducer
- 변수타입
- js
- ConnectBy
- 제어컴포넌트
- vscode
- ForwardRefs
- reactDOM
Archives
- Today
- Total
SOOM_BLOG [숨숨 블로그]
Return root level 본문
둘 이상의 'root' JSX 요소를 반환할 수 없다.
(변수에 둘 이상의 'root' JSX 요소를 저장할 수도 없다)
하나의 요소만 가질 수 있다.
물론 children은 더 가질 수 있다.
왜 하나의 요소만 저장하거나 리턴할 수 있을까?
자바스크립트에서는 하나 이상 리턴할 수 없기 때문!!
return (
<h2> Hi there! </h2>
<p> This does not work :-( </p>
)
⬇️⬇️⬇️
return (
React.createElement('h2', {}, 'Hi there!')
React.createElement('p', {}, 'This does not work :-(')
)
💡 여러 요소를 리턴 하고 싶은 경우엔 어떻게 할까?
1) 하나의 배열 값으로 리턴하자. (요소 마다 key 지정 필요.)
return [
true && <Modal key='modal'/>,
<div key='basic-div'>
<h2> Hi there! </h2>
<p> This does not work :-( </p>
</div>
];
2) 항상 요소들을 하나의 태그로 감싸자. ( <div> 태그 등)
return (
<div>
<h2> Hi there! </h2>
<p> This does not work :-( </p>
</div>
)
❗️ 문제점 : 불필요하게 렌더되는 div가 생긴다.
return (
<div>
<div>
<div>
<h2> Hi there! </h2>
</div>
</div>
</div>
)
더 큰 App들 에서는, 페이지에 의미나 구조를 추가하지 않지만, 'React's/JSX' 요구 사항 때문에 존재하는 수많은 불필요한 div (또는 기타 요소)가 쉽게 생길 수 있다.
이로 인해, 스타일이 깨지거나 많은 html요소를 렌더링하게 되어 app이 느려질 수 있다.
3) wrapper를 만들어 사용하자. (2번 해결방안)
const Wrapper = (props) => {
return props.children
};
export default Wrapper;
단순히 props.children을 리턴하는 wrapper를 만들어,
루트 태그가 필요한 곳에 div 등 불필요한 태그들 대신 wrapper로 감싸 주면 된다.
➡️ React에서 wrapper역할을 이미 제공하고 있으니, wrapper를 만들어 보는 건 연습으로만 추천한다..ㅎㅎ
- React.Fragment 사용 (react에서 제공, 항상 정상 작동)
return (
<React.Fragment>
<h2> Hi there! </h2>
<p> This does not work :-( </p>
</React.Fragment>
)
- '<></>' 사용 (빌드 워크플로우가 지원해야만 가능하기 때문에 프로젝트 환경에 따라 작동이 안될 수 있다.)
return (
<>
<h2> Hi there! </h2>
<p> This does not work :-( </p>
</>
)
참고자료 : udemy React 강의.
'TIL > react' 카테고리의 다른 글
useState() VS useReducer() (0) | 2022.01.26 |
---|---|
useEffect에서 CleanUp 함수 (0) | 2022.01.25 |
effect(=side effect) (0) | 2022.01.25 |
ref (0) | 2022.01.22 |
제어/비제어 컴포넌트 (0) | 2022.01.22 |