热装载器复制代码(n次)而不是热插拔

问题描述:

当我在一个组件中进行更改时,webpack重新编译并对模块进行热插拔反应..但是现在我的代码运行n次,其中n是热的次数模块交换已经发生。例如,我进行了更改,现在这些功能正在运行两次。我做了另一次改变,功能正在运行三次。我可以在我的商店的dispatchToken中放置console.log(Date.now()),我可以看到它正在运行n次。热装载器复制代码(n次)而不是热插拔

商店:http://pastebin.com/PVnyf572

webpack.config.js:http://pastebin.com/MsziqH9v

,我跑的WebPack-DEV-服务器webpack-dev-server app/client.js --inline --hot --colors

当我做一个复杂的变化,我经常收到后续的错误信息(尽管如果我改变商店的第60行以增加健康,例如10而不是6),则不会发生这种情况:

I t显示React Hot Loader配置不正确。如果您使用的是NPM,请确保您的依赖项不会将重复的React分布拖放到它们的node_modules中,并且需要(“react”)对应于您渲染应用程序的React实例。如果您使用的是预编译版本的React,请参阅https://github.com/gaearon/react-hot-loader/tree/master/docs#usage-with-external-react获取集成说明。

+0

你确定你没有在页面上加载两个单独的React副本给你的错误信息?例如,在Developer Tools/Sources中,如果您使用Ctrl + O或Cmd + O并键入React,您是否只有一个React.js? [实施例](https://d262ilb51hltx0.cloudfront.net/max/800/1*uRi1xESkWG6xJQIsKNhsZA.png) – HiDeo

我认为你的webpack配置不合适。使用此样板然后运行你的代码,我认为你的问题将得到解决

https://github.com/tapos007/ReactJS-MobX-Webpack-Boilerplate

这听起来像你热重装的东西,有副作用。

Webpack文档提供了a few examples以显示如何处理热重载。

根据您的引擎收录代码我猜想,这是一个副作用:

this.dispatchToken = Dispatcher.register(this.onAction.bind(this)) 

我认为你需要module.hot检测代码添加到PlayerStore文件为“注销”被替换的模块时, 。