热重载在我的 React 应用程序中不起作用

Mri*_*gla 27 javascript jsx reactjs webpack

我使用 npx create-react-app 创建了这个应用程序。之后我删除了 src 文件夹中除 index.js 之外的所有文件。然后热重载不起作用。我已经转到 chrome 并手动刷新页面以查看更改。这是我的index.js文件。

import React from 'react';
import ReactDom from 'react-dom';

function Greeting() {
  return (
    <div>
      <h1>hello World</h1>
      <ul>
        <li>Click Here</li>
      </ul>
    </div>
  );
}

ReactDom.render(<Greeting />, document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)

Package.json文件

{
  "name": "tutorial",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.11.4",
    "@testing-library/react": "^11.1.0",
    "@testing-library/user-event": "^12.1.10",
    "react": "^17.0.1",
    "react-dom": "^17.0.1",
    "react-scripts": "4.0.1",
    "web-vitals": "^0.2.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"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

YZE*_*YZE 19

为了解决热重载/快速刷新中的问题,我只需在package.json中添加CHOKIDAR_USEPOLLING=true

"scripts": {
        "start": "CHOKIDAR_USEPOLLING=true react-scripts start", //add this line
        "build": "react-scripts build",
        "test": "react-scripts test",
        "eject": "react-scripts eject"
}
Run Code Online (Sandbox Code Playgroud)

  • 这解决了我在 WSL Ubuntu 版本 2 上的问题 (6认同)
  • 在react-scriptsV5.0.0+中,现在根据这个答案为“WATCHPACK_POLLING=true”:/sf/answers/5170379651/ (6认同)
  • 从 Windows 11 + Ubuntu WSL2 开始,这有效! (2认同)

小智 15

有一个问题 - https://github.com/facebook/create-react-app/issues/9904

解决方法是将以下代码放入 index.js 以启用重新加载

if (module.hot) {
  module.hot.accept();
}
Run Code Online (Sandbox Code Playgroud)

进行此更改后必须重新启动服务器


Imr*_*her 14

虽然上述解决方案也很有用,但对大多数人来说有效的另一种方法是.env在项目中创建一个文件夹。

并在那里使用以下属性。

FAST_REFRESH = false
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

添加上述内容后,您必须重新启动服务器


小智 8

这可能是由于您的文件系统、文件扩展名或 Create-React-App 默认 webpack/项目配置 造成的。您不一定需要更改所有这些,因为热重载应该是开箱即用的,如果项目刚刚开始,则更是如此。

例如,我曾经在安装 Typescript(^17.0.1) 时遇到问题,其中某些扩展名为 .ts 的文件不会触发热重载。我必须更改为.tsx并添加 React 导入。.js和 .jsx 文件也可能发生同样的 情况。

如果您的文件系统(Unix、Mac)出现问题,您可以在此处尝试 React 配置(FAST_REFRESH=false) ...或更改文件夹名称,但我对此没有太多了解。


Mri*_*gla 4

package.json 文件中的 React-scripts 版本 4.0.1 存在问题。我已将其替换为 'react-scripts' : '3.4.4' 现在它可以工作了。欲了解更多信息:https ://github.com/facebook/create-react-app/issues/9984