CreateReactAppでReact 18のプロジェクトを作るとエラーがでる
9027 ワード
概要
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はまだまだこれからですが、公式のドキュメントやブログが非常に丁寧なのでしっかり確認しようと思います。
一方でけっこう果敢に変更がマージされるっぽい雰囲気を感じ取ったので、どんどんキャッチアップしていこうと思いました。
Author And Source
この問題について(CreateReactAppでReact 18のプロジェクトを作るとエラーがでる), 我々は、より多くの情報をここで見つけました https://zenn.dev/kohski/articles/create-react-app-error-v18著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol