React native 热重载刷新但不更新更改

React native hot reloading refreshes but not updating the changes

我了解 React 的基础知识,并在 React 上做过一些个人项目。现在我从 react-native.

开始

所以我创建了一个新项目和 运行 run-android 命令。它完成了所有必需的处理并启动了模拟器(我正在使用 Genymotion android 模拟器),

react-native init AwesomeProject
cd AwesomeProject
react-native run-android

之后,我在模拟器中启用了热重载。打开项目并稍微更改代码。然后进入模拟器,我按 r(两次),它说 fetching bundle。但我得到同样的东西。什么都没有改变。更改未更新。

所以,我关闭了终端并再次 运行 同样的命令

react-native run-android

然后...它显示了变化。我不知道这里出了什么问题。我看到 this post 并认为它可能有所帮助。但是没有。

我做错了什么?我使用的是 react-native 0.30.0 和 Node v6.3.1。如果有帮助,我在 windows 7 和 运行 一个 nexus 6P 作为 Genymotion android 模拟器。

回答我自己的问题。 This post 帮助了我。

在此文件中 \node_modules\react-native\node_modules\node-haste\lib\FileWatcher\ index.js

  1. 我不得不增加MAX_WAIT_TIME(我的我从120000改为360000)。
  2. 也得改

这个

key: '_createWatcher',
    value: function _createWatcher(rootConfig) {
      var watcher = new WatcherClass(rootConfig.dir, {
        glob: rootConfig.globs,
        dot: false
      });

      return new Promise(function (resolve, reject) {
        var rejectTimeout = setTimeout(function () {
          return reject(new Error(timeoutMessage(WatcherClass)));
        }, MAX_WAIT_TIME);

        watcher.once('ready', function () {
          clearTimeout(rejectTimeout);
          resolve(watcher);
        });
      });
    }

进入

key: '_createWatcher',
    value: function _createWatcher(rootConfig) {
      var watcher = new WatcherClass(rootConfig.dir, {
        glob: rootConfig.globs,
        dot: false
      });

      return new Promise(function (resolve, reject) {

        const rejectTimeout = setTimeout(function() {
          reject(new Error([
            'Watcher took too long to load',
            'Try running `watchman version` from your terminal',
            'https://facebook.github.io/watchman/docs/troubleshooting.html',
          ].join('\n')));
        }, MAX_WAIT_TIME);

        watcher.once('ready', function () {
          clearTimeout(rejectTimeout);
          resolve(watcher);
        });
      });
    }

现在更改后,我所做的任何代码更改,我什至不必按两次 R,它会自动更改。我希望这可以帮助像我这样的菜鸟。谢谢。

我做了两件事

1) 将 MAX_WAIT_TIME 值更改为 360000 2) 在 Android 模拟器上执行 Ctrl+M 并选择 "Enable hot reloading"

现在,代码中的任何更改都会在不到一秒的时间内反映在模拟器中。