🔥
CreateReactAppでReact 18のプロジェクトを作るとエラーがでる
概要
CreateReactAppでReactのプロジェクトを作ってReactの勉強をしています。
CreateReactAppで自動生成されるコードの一部がどうやらReact 18に対応していないようです。
事象
$ npx create-react-app <project-name>
$ cd <project-name>
$ yarn start
browserからlocalhost:3000
にアクセスすると以下のエラーがconsoleに出力される。
Warning: ReactDOM.render is no longer supported in React 18. Use createRoot instead. Until you switch to the new API, your app will behave as if it's running React 17. Learn more: https://reactjs.org/link/switch-to-createroot
生成されたコードの一部
src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
対処法
こちらのブログで触れられています。
src/index.js
import React from 'react';
- import ReactDOM from 'react-dom';
+ import { createRoot } from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
- ReactDOM.render(
- <React.StrictMode>
- <App />
- </React.StrictMode>,
- document.getElementById('root')
- );
+ const container = document.getElementById('root');
+ const root = createRoot(container);
+ root.render(<App />);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();
最後に
Reactはまだまだこれからですが、公式のドキュメントやブログが非常に丁寧なのでしっかり確認しようと思います。
一方でけっこう果敢に変更がマージされるっぽい雰囲気を感じ取ったので、どんどんキャッチアップしていこうと思いました。
Discussion