3

我知道 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

然后……它显示了变化。我不知道这里有什么问题。我看到了这篇文章,并认为它可能会有所帮助。但它没有。

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

4

2 回答 2

3

回答我自己的问题。这篇文章帮助了我。

在这个文件里面 \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 两次,它会自动更改。我希望这可以帮助像我这样的菜鸟。谢谢你。

于 2016-08-02T18:10:50.113 回答
0

我做了两件事

1) 将 MAX_WAIT_TIME 值更改为 360000 2) 在 Android 模拟器上执行 Ctrl+M 并选择“启用热重载”

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

于 2016-09-22T16:49:04.187 回答