728x90
React에서 DOM에 html을 그리는 원리 및 코드는 다음과 같다.
ReactDOM.render(
// <div>테스트</div>
React.createElement("div",null,"테스트"),
document.getElementById("root")
);
위의 예제는 div하나만 그리지만 일반적으로 저렇게 간단한 코드를 사용하는 경우는 거의 없다.
예를 들어, <div>태그 안에 여러 태그가 있다고 가정해보자.
ReactDOM.render(
/*<div>
<div>
<h1>테스트1</h1>
<h1>테스트2</h1>
</div>
</div>*/
React.createElement(
"div",
null,
React.createElement(
"div",
null,
Reat.createElement("h1",null,"테스트1"),
Reat.createElement("h1",null,"테스트2")
)
),
document.getElementById("root")
)
만약 위처럼 그러야한다면 React는 지금과 같은 인기를 얻지 못했을것이다.
이렇게 React.createElement로 계속 그리는것은 가독성도 좋지 않고, 매우 귀찮은 작업이 된다.
따라서, 여기서 Babel을 이용한 JSX를 이용한다면 아래와 같이 작성할 수 있게된다.
ReactDOM.render(
<div>
<div>
<h1>테스트1</h1>
<h1>테스트2</h1>
</div>
</div>,
document.getElementById("root")
)
이게 어떻게 가능한 것일까?
Babel사이트 << 여기를 들어가보면 확인할 수 있다.
위와 같이 변환이 된다.
따라서 Babel을 이용한 JSX를 사용하게되면 위와 같이 코드가 가독성있게 변환되어 사용하게 된다.
※ JSX 문법
- 최상위 요소는 하나
- 최상위 요소 리턴하는 경우, ()로 감싸야함
- 자식을 바로 렌더링 하려면 Fragment를 사용 (<>{children}</>)
- if문은 사용할 수 없다, 다만 삼항 연산자 , &&는 가능
- {}로 묶어서 자바스크립트 표현식 사용 가능 => {js표현식}
- style을 이용해 인라인 스타일링 가능
- class 대신 className을 사용해서 class를 적용할 수 있음
- 자식요소가 있으면 꼭 닫아야함
728x90
'Front-End > React' 카테고리의 다른 글
[React] Modal toggle 로직 개선 과정 (0) | 2023.03.01 |
---|---|
[React] proxy 여러개 설정하여 협업하는 방법 (0) | 2023.02.21 |
[React] 불변객체로 변수 비교의 장점 (0) | 2022.01.26 |
[React] react-router-dom의 Link 컴포넌트와 a 태그 페이지 전환 차이점 (0) | 2021.01.25 |
[React] vscode snippet(자동완성 커스텀) 설정 방법 (0) | 2021.01.03 |