この記事は公式のIntroducing the New JSX Transformに基づいて書かれています。
結論
-
import React from "react";
はReact 17以降は必要ないよ。16以前は必要だよ。 - コンパイラが自動でインポートしてくれるようになったよ。
本編
Reactでコンポーネントのコードを書くときに、React
をソースコードの中で特に使ってる訳ではないけど、import React from "react";
って書いてますよね。
import React from 'react';
function App() {
return <h1>Hello World</h1>;
}
なぜ必要かというと、Reactコンポーネントは次のようにコンパイルされるためです。
コンパイル後
import React from 'react';
function App() {
return React.createElement('h1', null, 'Hello world');
}
コンパイル前のコードでReact
を使っていなくても、コンパイル後のコードでReact.createElement
を使っているからインポートが必要なんですね。でも、React 17以降はコンパイルの挙動が変更されました。
React17以降
// 次の行はコンパイル時に自動で挿入される
import {jsx as _jsx} from 'react/jsx-runtime';
function App() {
return _jsx('h1', { children: 'Hello world' });
}
エレメントを生成する関数がReact.createElement
からjsx
に変わりました。また、jsx
はコンパイル時に自動でインポートされるようになりました。よって、React 17以降はimport React from "react";
は書く必要がなくなったわけです。