8

我在 Windows 10 和 Ubuntu 16.04 上尝试过。在这两种情况下,热重载仅适用于 jsx 中的更改,但不适用于我更改 javascript 中的变量或函数或其他内容时。热重载已启用。实时重新加载已禁用。当我在 Visual Studio 代码编辑器中保存更改时,虚拟设备 (android studio) 会重新加载,但更改不存在。EXPO App 中的物理设备上也是如此。

首先我没有安装守望者。Hot Relaod 不工作。安装后热重载也不起作用。

我使用 create-react-native-app 启动应用程序。它不会被弹出。

包.json:

{
  "name": "NativeReduxSaga",
  "version": "0.1.0",
  "private": true,
  "devDependencies": {
    "jest-expo": "25.0.0",
    "react-native-debugger-open": "^0.3.17",
    "react-native-scripts": "1.11.1",
    "react-test-renderer": "16.2.0"
  },
  "main": "./node_modules/react-native-scripts/build/bin/crna-entry.js",
  "scripts": {
    "start": "react-native-scripts start",
    "eject": "react-native-scripts eject",
    "android": "react-native-scripts android",
    "ios": "react-native-scripts ios",
    "test": "node node_modules/jest/bin/jest.js",
    "postinstall": "rndebugger-open --expo"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@redux-offline/redux-offline": "^2.3.2",
    "expo": "^25.0.0",
    "prop-types": "^15.6.1",
    "react": "16.2.0",
    "react-native": "0.52.0",
    "react-native-autocomplete-input": "^3.5.0",
    "react-navigation": "^1.5.2",
    "react-redux": "^5.0.7",
    "redux": "^3.7.2",
    "redux-devtools-extension": "^2.13.2",
    "redux-logger": "^3.0.6",
    "redux-observable": "^0.18.0",
    "redux-promise-middleware": "^5.0.0",
    "redux-saga": "^0.16.0",
    "redux-thunk": "^2.2.0",
    "rxjs": "^5.5.7"
  }
}

守望者版

{
    "version": "4.9.1",
    "buildinfo": "94e66865386e844f2cffe52e355a94c96562d2e3 2018-03-12T19:58:02.0000000Z"
}

节点版本 v6.13.1

我在这里读到一些文章,它可以帮助在 Windows 上提高 MAX_WAIT_TIME。但我没有 \node_modules\react-native\node_modules\node-haste\lib\FileWatcher\ index.js 文件。

为什么它也不能在 Ubuntu 上运行?

我真的需要守望者吗?应该如何配置?我的 .watchmanconfig 文件是一个空对象,例如 {}。

Hot Reload 通常与 create-react-native-app 一起使用吗?

有人知道我可以在这里尝试什么来让热重载工作吗?感谢您的帮助!

4

9 回答 9

19

实际上,热重载和实时重载是有区别的。

热重载是即时重载,同时保持应用程序状态不变。但是,它仅在render方法内部起作用,并且仅在类 React.Component 和 Component 的扩展上触发

如:

class A extends Component ...
class B extends React.Component ...

另一方面,Live Reload会重建您的应用程序并丢弃您的应用程序状态。它包括一切,从变量和方法到最简单的字符串。这就是为什么总是从应用程序的开始屏幕开始(因为状态丢失)。

希望能帮助到你!

于 2018-03-29T09:33:42.903 回答
13

删除 gitindex.lock文件对我有用

rm -rf .git/index.lock

于 2019-05-02T08:04:05.430 回答
4

在 android 去你的 MainApplication.Java 搜索 @Override public boolean getUseDeveloperSupport() { return true; }

确保它返回 true。这可能是问题

于 2019-08-21T07:19:33.253 回答
1

我执行了以下步骤来解决此问题:

  1. mkdir android/app/src/main/assets

  2. react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /主/资源

  3. 在模拟器中摇动安卓设备或 cmd + d 你会得到一个菜单。

  4. 一旦启用和禁用热重载。

  5. 清除您在开发设置 -> 调试 -> 调试服务器主机和设备端口中使用的任何 IP 地址。

  6. 启用热重载。

  7. 在终端中转到您的项目目录-> react-native start

  8. react-native run-android 或者直接在你的 android studio 中运行。

于 2018-09-11T12:29:50.120 回答
0

我认为这是海峡前进

在此处输入图像描述

也不要忘记npm start在你的文本编辑器中运行,而不是像 git bash 这样的外部编辑器

于 2021-12-30T09:25:00.117 回答
0

对于在使用 WSL 2 时遇到此问题的任何人,文件需要存在于 Linux 子系统中,而不是任何已安装的 Windows 文件夹中,文件监视才能正常工作。摘自Reddit 上的这篇文章

他们更改了文件共享协议,从使用自己定制开发的协议到使用 9P 协议,此时可能不支持文件更改事件。

我相信您可以通过将代码放在 Linux 文件系统上(例如:在用户的主目录中)来解决此问题,并通过 WSL 共享从 Windows 访问这些文件 \wsl$\DISTRO_NAME。

在 Windows 资源管理器中,如果您转到 \wsl$,您应该会看到已安装的所有 WSL Linux 发行版,并且可以访问其文件系统上的所有文件。

于 2019-12-30T16:01:22.733 回答
0

对我来说,问题在于,由于 react-native 旧版本AndroidX,基本上你需要迁移到一些时间AndroidX

只需在Android Studio

Refactor->Migrate to Android X ...并按照说明进行操作

并且当它被提升为保存端时,不要避免进行备份

于 2019-08-27T06:33:50.777 回答
0

替代解决方案:

  "scripts": {
-    "start": "react-native-scripts start",
+    "start": "DEBUG=true react-native-scripts start",
  },

为了让它工作,你应该确保这个文件没有被改变:

// ./android/app/src/main/java/com/cubyn/storage/MainApplication.java

...
    @Override
    public boolean getUseDeveloperSupport() {
      return BuildConfig.DEBUG;
    }
...

恕我直言,这是一个更好的解决方案,因为它只会在开发期间启用,而不是在捆绑生产时启用。

于 2022-02-22T10:31:37.103 回答
-2

确保您的 .git 目录中没有 index.lock 文件:) 删除它可以解决您的问题。

于 2019-08-07T12:55:10.723 回答