我有一个现有的 React 17 应用程序,它最初是作为带有 TypeScript 选项的 create-react-app 输出。我想更改 package.json 以包含react@18.0.0然后react-dom@18.0.0启动应用程序,该步骤工作正常。
然后我尝试index.tsx按照 React 18 迁移说明告诉您的方式更改文件,将相关段更改为index.tsx:
ReactDOM.createRoot(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
Run Code Online (Sandbox Code Playgroud)
或者npm run build或者npm run start给我编译错误,说 createRoot 未定义。这可能是由于我依赖于@types/react@17.0.43和@types/react-dom@17.0.14。对于 React 18,DefiniteTyped 似乎还没有这些文件的任何更新版本。
所以,我回去创建了一个全新的应用程序npx create-react-app react18 --template typescript。它现在需要react@18和react-dom@18,但仍然具有旧的@types/依赖项。当您从 render() 切换到 createRoot() 时,它也会给出相同的编译错误。
作为进一步的一步,我问自己“如果我们忽略 TypeScript 会发生什么?” 使用 . 创建了另一个应用程序npx create-react-app react18js。它取决于react@18.0.0并react-dom@18.0.0符合预期,但仍会ReactDOM.render()在其 …