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
- 我不得不增加
MAX_WAIT_TIME
(我的我从120000改为360000)。
- 也得改
这个
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"
现在,代码中的任何更改都会在不到一秒的时间内反映在模拟器中。
我了解 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
- 我不得不增加
MAX_WAIT_TIME
(我的我从120000改为360000)。 - 也得改
这个
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"
现在,代码中的任何更改都会在不到一秒的时间内反映在模拟器中。