React Native 热重载刷新了但没有更新更改。

3

我了解React的基础知识,并在React上完成了一些个人项目。现在我开始学习React Native

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

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

在模拟器中,我启用了热重载。打开项目并稍微更改了一下代码。然后进入模拟器,按下r键(两次),它会显示“获取捆绑包”。但是我得到的仍然是相同的东西。没有任何变化。更改未更新。
所以,我关闭了终端并再次运行了相同的命令。
react-native run-android

然后...它显示了更改。我不知道这里出了什么问题。我看到 this post,想着它可能有帮助。但是没有。

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

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键,它会自动更改。我希望这可以帮助像我这样的新手。谢谢。

1
在我的 \node_modules\react-native\node_modules\ 目录中找不到任何 "node-haste" 目录。我该怎么办?有时我的应用程序会刷新,有时则不会。那么有什么简单可行的方法吗? - Habib

0

我做了两件事情

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接