【问题标题】:Module not found: Error: Can't resolve 'react-dom/client'找不到模块:错误:无法解析“react-dom/client”
【发布时间】:2022-06-16 16:26:22
【问题描述】:

我正在使用对以下软件包做出反应:

{
  "name": "demo",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.4",
    "@testing-library/react": "^13.0.1",
    "@testing-library/user-event": "^13.5.0",
    "h3-js": "^3.7.2",
    "leaflet": "^1.7.1",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-leaflet": "3.0.2",
    "react-scripts": "5.0.1",
    "web-vitals": "^2.1.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

我的index.js 如下所示:

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);

reportWebVitals();

我的App.js 如下:

import React from "react";
import { render } from "react-dom";
import LeafletMap from "./Map";

class App extends React.Component {
  state = { resolution: 8, kRing: 0 };

  constructor(props) {
    super(props);
    this.state = { resolution: 8, kRing: 0 };
  }

  render() {
    return (
      <div>
        <LeafletMap
          resolution={this.state.resolution}
          kRing={this.state.kRing}
        />
        Resolution:
        <input
          type="number"
          min={0}
          max={15}
          onChange={this.onChangeResolution}
          defaultValue={8}
        />
        <br />
        K Rings:
        <input
          type="number"
          min={0}
          max={100}
          onChange={this.onChangeKRings}
          defaultValue={0}
        />
      </div>
    );
  }

  onChangeResolution = (e) => {
    this.setState({ resolution: Number.parseInt(e.target.value) });
  };
  onChangeKRings = (e) => {
    this.setState({ kRing: Number.parseInt(e.target.value) });
  };
}

export default App;

当我使用 npm run start 运行我的应用程序时,我收到以下错误:

Compiled with problems:X

ERROR in ./src/index.js 5:0-40

Module not found: Error: Can't resolve 'react-dom/client' in '/home/Desktop/Code/demo_app/src'

我重新安装了所有软件包,它也列在npm list

>  npm list
demo_app@0.1.0 /home/Desktop/Code/demo_app
├── @testing-library/jest-dom@5.16.4
├── @testing-library/react@13.0.1
├── @testing-library/user-event@13.5.0
├── h3-js@3.7.2
├── leaflet@1.7.1
├── react-dom@17.0.1
├── react-leaflet@3.0.2
├── react-scripts@5.0.1
├── react@17.0.1
└── web-vitals@2.1.4

关于我在编译应用程序时遇到问题的任何建议?

【问题讨论】:

  • 因为这是 React 18 中的新功能。
  • @jonrsharpe 我目前正在使用react 17,因为h3-js-库在react 18 中不起作用。我怎样才能让应用程序仍然运行?
  • react-dom/client 是 v18 中的新内容。您的 package.json 让您使用 v17。如果升级到 v18.0.0,错误应该会消失。或者,使用 v17 使用的旧 ReactDOM.render 方式。
  • @Carol.Kar - 如果您搜索一个示例,我认为您不会有任何问题。 :-) 基本上:import ReactDOM from "react-dom"; 然后不是做createRoot / root.render,而是做ReactDOM.render(JSXHERE, targetElementHere); 例如:ReactDOM.render(&lt;React.StrictMode&gt;&lt;App /&gt;&lt;/React.StrictMode&gt;, document.getElementById("root"));

标签: javascript node.js reactjs react-dom


【解决方案1】:

对我有用的最终解决方案是将 React 18 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))
reportWebVitals();

【讨论】:

  • 在我的情况下,粘贴代码后它无法解析./reportWebVitals
【解决方案2】:

您的依赖项中仍然有旧版本的“react”和“react-dom”。 解决它:

  1. 删除这两行:
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
  1. 将它们替换为:
    "react": "^18.1.0",
    "react-dom": "^18.1.0",
  1. 删除“node_modules”文件夹
  2. npm install 这应该可以解决您的问题并将您的应用更新为 react18

【讨论】:

    【解决方案3】:

    你可能需要降级 React 和 react-dom,这里是 index.js:

    React 17 示例:
    import React from "react";
    import { render } from "react-dom";
    import "./index.css";
    import App from "./App";
    
    const root = document.getElementById("root");
    render(<App />, root);
    
    React 18 示例:
    import React from 'react';
    import ReactDOM from 'react-dom/client';
    import './index.css';
    import App from './App';
    
    const root = ReactDOM.createRoot(document.getElementById('root'));
    root.render(
      <React.StrictMode>
        <App />
      </React.StrictMode>
    );
    

    【讨论】:

      【解决方案4】:

      我有类似的问题,我通过添加解决了它

       "noImplicitAny": false
      

      在 tsconfig.json 上

      【讨论】:

        【解决方案5】:

        对于 React 18.1 版(带有打字稿), 这对我有用

            import React from "react";
            import { createRoot } from "react-dom/client";
            import reportWebVitals from "./reportWebVitals";
            import App from "./App";
            const root = createRoot(
                document.getElementById("root") as HTMLElement
            );
            root.render(
               <React.StrictMode>
                  <App />
               </React.StrictMode>
            );
            reportWebVitals();
        

        【讨论】:

        • 是的,这是可行的,看起来这只是写 index.js 文件的 react 18 方式。但是如果你使用 react 17 项目,这个文件会导致错误
        【解决方案6】:

        总而言之,如果您使用的是 React 17(我的版本是 17.0.2),那么您的 index.js 必须如下所示,

        import React from 'react';
        import ReactDOM from 'react-dom';
        import App from './App';
        
        ReactDOM.render(
          <React.StrictMode>
            <App />
          </React.StrictMode>,
         document.getElementById('root')
        );
        

        如果您使用的是 React 18,您的 index.js 文件应如下所示

        import React from 'react';
        import ReactDOM from 'react-dom/client';
        import './index.css';
        import App from './App';
        
        const root = ReactDOM.createRoot(document.getElementById('root'));
        root.render(
         <React.StrictMode>
           <App />
         </React.StrictMode>
        );
        

        当我将 react 18 项目降级为 react 17 项目时,我遇到了问题。 我用过,

        npm install react@17 react-dom@17
        

        对于打字稿项目,

        npm install react@17 @types/react@17 react-dom@17 @types/react-dom@17
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-06-23
          • 2016-10-27
          • 2020-10-13
          • 2017-03-31
          • 2022-07-20
          • 1970-01-01
          • 2023-01-10
          • 2020-06-15
          相关资源
          最近更新 更多