inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

처음 만난 리액트(React)

10강 JSX의 정의와 역할 질문

해결된 질문

446

코딩바보

작성한 질문수 6

1

선생님ㅜㅜ 강의잘보고있습니다..

정말 설명 너무잘하시는 것 같아요

귀에 쏙쏙들어와요

 

10강 JSX의 정의와 역할 2분 54초에

JSX코드를 자바스크립트로 변환하는 역할을 하는 것이 React에 createElement라고 하시는데

React.creatElement(
type,
[props],
[...children]
)

React.creatElement는 jsx를 사용하지 않고 만드는 방법아닌가요?

 

그렇다면 createElement는 html/XML 코드를 자바스크립트로 변환하는 역할을 하는 건가요?

 

HTML/CSS javascript react

답변 1

1

Inje Lee (소플)

안녕하세요, 소플입니다.

아무래도 제 설명이 약간 오해의 소지가 있을 수 있을 것 같네요~

강의에서 제가 전달하려고 의도한 내용은,

JSX로 작성된 코드를 최종적으로 JavaScript 객체 형태로 만들어주는 것이 바로 React.createElement() 함수라는 것이었습니다.

이 때 생성된 JavaScript 객체가 바로 React Element인 것이죠.

 

그리고 실제로 JSX로 작성한 코드를 React.createElement()를 사용하도록 변환해주는 것은,

Babel이라는 JavaScript compiler가 해주는 역할입니다.

Babel의 수많은 플러그인 중 JSX를 JS로 변환해주는 것을,

일반적으로 JSX Transform이라고 부릅니다.

 

그래서 정리해보면 아래와 같은 순서를 거쳐서 React Element가 생성된다고 보시면 됩니다.

JSX 코드 => Babel(JSX Transform) => JS 코드(React.createElement() 사용) => React Element

하지만 이 방식은 JSX를 변환하기 위해서 React의 createElement()에 의존해야만 했었고,

그 과정에서 createElement()로 인해 성능을 향상시키지 못하는 문제가 있었습니다.

(과거 JSX Transform 참고: https://www.npmjs.com/package/babel-plugin-transform-react-jsx#react)

그래서 성능을 향상시키기 위해서 현재 리액트에서는 아래와 같은 형태로 JSX Transform이 별도로 분리되었고, Babel에서는 이것을 이용하여 JSX를 JS로 변환하게 됩니다.

import {jsx as _jsx} from 'react/jsx-runtime';

function App() {
  return _jsx('h1', { children: 'Hello world' });
}

 

관련해서 혹시 더 자세한 내용이 궁금하시면 아래 링크를 참고하시면 도움이 되실 것 같습니다!

https://legacy.reactjs.org/blog/2020/09/22/introducing-the-new-jsx-transform.html#whats-different-in-the-new-transform

 

감사합니다.

1

코딩바보

선생님 감사합니다!!!!

강의가 삭제되었다고 합니다

0

106

1

이거 왜 존재하지 않는다고 뜨는건가요

0

133

1

존재하지 않는 수업이라고 떠요

0

183

1

안드로이드 에뮬레이터 오류

0

100

1

교재 구입해서 강의 들으려고 하는데 커리큘럼이 없어졌어요.

0

125

1

prevIsConfiromed 질문

1

141

2

chapter14 잘이해가 되지않습니다..

1

135

2

2025년 3월 리액트버전

1

202

2

npm 설치 오류

1

175

1

chapter_07 콘솔로그 질문드려요~!

1

127

2

안녕하세요 미니블로그 실습 질문드립니다.

1

178

3

에러가 떠요

1

218

3

Chapter6 질문 드립니다

1

209

2

실습 코드 있을까요?

1

206

2

상태가 업데이트될때 컴포넌트 최상단의 console.log 코드가 두번 실행되는 이유가 궁금합니다.

1

233

2

npx create-react-app my-app 명령어 입력이 잘못된 것 같습니다

0

308

3

이름과 코멘트 줄바꿈이 안 됩니다.

0

140

1

버튼이 안 뜹니다

0

303

2

npx create-react-app my-app

1

470

2

jsx 코드 작성해보기에서 index.js 수정 후 에러 뜹니다.

1

376

3

Chapter_05 터미널, 리액트 에러

0

193

2

npx create-react-app my-app 명령어 반응없음

1

432

3

import 코드 에러

1

214

1

백틱

1

121

1