📌 과거에는 import React가 필수였다
React를 공부하다 보면 예전 강의나 코드에서 import React from "react"; 구문을 흔히 볼 수 있다. 이는 기존 React 버전에서는 JSX 문법을 사용할 때 React가 필요했기 때문이다.
JSX(JavaScript XML)는 JavaScript 안에서 HTML과 유사한 문법을 사용할 수 있도록 해주지만, 실제로는 React.createElement를 호출하는 코드로 변환된다. 예를 들어,
const element = <h1>Hello, world!</h1>;
위 코드는 Babel을 통해 다음과 같이 변환되는 것이다.
const element = React.createElement("h1", null, "Hello, world!");
이 과정에서 React.createElement를 사용하기 때문에 React를 반드시 import해야 했다.
🚀 최신 React에서는 import React가 필요 없는 이유
React 17부터는 새로운 JSX Transform이 도입되면서 import React from "react";를 명시적으로 하지 않아도 JSX가 동작하도록 변경되었다고 한다.
기존에는 JSX가 React.createElement를 직접 호출했지만, 새로운 JSX Transform에서는 자동으로 React를 import하는 방식으로 변경되었다. 이를 가능하게 해주는 것은 새로운 JSX 변환 방식 때문이다.
예를 들어, 아래와 같은 코드가 있다고 가정하면:
const element = <h1>Hello, world!</h1>;
React 17 이상에서는 Babel이 이를 다음과 같이 변환한다.
import { jsx as _jsx } from "react/jsx-runtime";
const element = _jsx("h1", { children: "Hello, world!" });
즉, react/jsx-runtime을 통해 JSX 변환이 이루어지므로 import React from "react";를 직접 작성할 필요가 없어진 것이다.
🎯 그래도 import React를 해야 할 때는?
React 17 이상에서는 일반적인 JSX 코드에서 import React를 생략할 수 있지만, 몇 가지 경우에는 여전히 필요할 수 있다.
- React 16 이하를 사용하는 프로젝트: 기존 방식에서는 JSX를 변환할 때 React.createElement가 필요했으므로 React 16 이하를 사용한다면 import React가 필수
- React API를 직접 사용할 때: useState, useEffect 등과 같은 React Hook을 사용할 때는 여전히 import React from "react";가 필요
- JSX Transform을 지원하지 않는 환경: 만약 Babel이 새로운 JSX Transform을 적용하지 않도록 설정되어 있다면 기존 방식이 유지
관련 문서
https://babeljs.io/blog/2020/03/16/7.9.0#a-new-jsx-transform-11154
7.9.0 Released: Smaller preset-env output, Typescript 3.8 support and a new JSX transform · Babel
While preparing the Babel 8.0.0 release (in the next months), we just finished working on a new minor release which includes updates related to @babel/preset-env, TypeScript 3.8, Flow, and JSX!
babeljs.io
https://github.com/facebook/react/blob/main/CHANGELOG.md#1700-october-20-2020
react/CHANGELOG.md at main · facebook/react
The library for web and native user interfaces. Contribute to facebook/react development by creating an account on GitHub.
github.com
'[Study] 개발 공부 > [React] 리액트 공부' 카테고리의 다른 글
[styled-components/React] styled-components: it looks like an unknown prop "X" is being sent through to the DOM... 경고 메시지 해결하기 (0) | 2025.03.27 |
---|---|
[Redux] Redux Thunk를 왜 사용해야 할까 (0) | 2025.02.17 |
[React-redux] ToDo List 로컬스토리지로 관리하기 (0) | 2025.02.05 |
sort를 사용한 특수 조건 우선 정렬 (0) | 2025.01.03 |
[React] dangerouslySetInnerHTML: DOM에서 innerHTML 사용하기 (0) | 2024.12.10 |