Hot Reload无法在react-native android

时间:2018-03-26 09:10:11

标签: react-native react-native-android create-react-native-app watchman hot-reload

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

首先,我没有安装守望者。 Hot Relaod无法正常工作。安装后,Hot Reload也无法正常工作。

我使用create-react-native-app启动应用程序。它没有被驱逐出去。

的package.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一起使用吗?

有人知道我可以在这里尝试一下,让热重装工作吗? Thanx求救!

7 个答案:

答案 0 :(得分:13)

实际上,热门和实时重新加载之间存在差异。

热重新加载即时重新加载,同时保持应用程序的状态不变。但是,它仅适用于render方法,仅在类React.Component和Component

的扩展时触发

如:

class A extends Component ...
class B extends React.Component ...
另一方面,

实时重新加载,重建您的应用程序并丢弃您的应用程序状态。它包括从变量和方法到最简单的字符串的所有内容。这就是为什么一个人总是从应用程序的开始屏幕开始(因为状态丢失)。

希望它有所帮助!

答案 1 :(得分:1)

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

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

  2. react-native软件包--platform android --dev false --entry-file index.js --bundle-output android / app / src / main / assets / index.android.bundle --assets-目标android / app / src / main / res

  3. 在模拟器中摇动android设备或cmd + d,您将获得一个菜单。

  4. 启用和禁用热重装。

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

  6. 启用热重装。

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

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

答案 2 :(得分:1)

删除git import { Injectable } from "@angular/core"; import { HttpClient } from "@angular/common/http"; import { Observable } from 'rxjs'; import { SimpleReward } from "../models/simple-reward"; @Injectable() export class RewardsService { private baseUrl = "http://10.0.2.2:52553/api/rewards"; constructor(private http: HttpClient) {} getAllRewards(): Observable<SimpleReward[]> { const url = `${this.baseUrl}/all`; return this.http.get<SimpleReward[]>(url); } }文件对我有用

index.lock

答案 3 :(得分:0)

在Android中

转到您的MainApplication.Java 搜索 @Override public boolean getUseDeveloperSupport() { return true; }

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

答案 4 :(得分:0)

对我来说,问题出在AndroidX上,由于反应本机的旧版本,基本上需要一段时间才能迁移到AndroidX

只需在Android Studio

中打开您的项目
  

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

并且在将其升级为保存方时,请避免进行备份

答案 5 :(得分:0)

对于使用WSL 2时遇到此问题的任何人,文件都必须存在于Linux子系统内,而不是在任何已安装的Windows文件夹内,以使文件监视正常工作。取自this post on Reddit

  

他们将文件共享协议从使用他们自己的自定义开发协议更改为使用9P协议,这一次可能不支持文件更改事件。

     

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

     

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

答案 6 :(得分:-2)

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