5

当我对组件进行更改时,webpack 会重新编译并对模块进行热交换。但是现在我的代码运行n时间n是发生热模块交换的次数。例如,我进行了更改,现在函数运行了两次。我又做了一次更改,函数运行了 3 次。我可以console.log(Date.now())在我的商店的 dispatchToken 中放置一个,我可以看到它是运行n时间。

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

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

我运行 webpack-dev-serverwebpack-dev-server app/client.js --inline --hot --colors

当我进行复杂的更改时,我经常会收到以下错误消息(尽管如果我将 Store 的第 60 行更改为将生命值增加 10 而不是 6,则不会发生这种情况):

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

4

2 回答 2

3

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

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

于 2016-07-19T08:32:54.320 回答
1

听起来您正在热重新加载具有副作用的东西。

Webpack 文档提供了一些示例来展示如何处理热重载。

根据您的 pastebin 代码,我猜这是一个副作用:

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

我认为您需要在替换模块时将module.hot检测代码添加到PlayerStore文件中以“取消注册”。

于 2016-07-19T16:37:36.463 回答