无法设置#<Object>的属性createElement,它只是一个getter

Mr *_*r A 7 reactjs babeljs react-hot-loader webpack-2 preact

描述

什么要报告:我下面这组指令如何设置作出反应热loarder.但是,当我进入第3步,我把补丁放入其中时,它会突破到下面的那个.

预期的行为

您认为应该发生什么:应该正常工作

实际行为

图片

环境

React Hot Loader版本:下一步

在项目文件夹中运行这些命令并填写其结果:

  1. node -v:7.9.0
  2. npm -v:4.2.0

然后,指定:

  1. 操作系统:Windows 10
  2. 浏览器和版本:最新的Chrome

可重复的演示

https://github.com/abarcenas29/preact-sandbox-v0/blob/wip/hot-reloader/src/main.js

branch:wip-hot-reloader

说明:

  • yarn
  • yarn run postinstall
  • yarn run start:dev

Pav*_*juk 10

我没有足够的声誉发表评论,所以我必须写一个答案,这不是问题的解决方案,但仍然......

您收到的错误是由于react-hot-loader/patch需要实际react模块并createElement使用新模块修补其功能.在这里看到:react-hot-loader/lib/patch.dev.js:179

主要问题是webpack配置 react模块被解析为preact-compat显然不允许设置新值,因此Hot Reload无法一起运行.

希望这能回答你的问题.因为它是 - 我认为热重装不会在该设置中工作.

编辑: 找到一个简单的解决方案.将webpack.config.js解析块更改为此,指向react您自己的脚本:

// resolve for preact
webpack.resolve = {
  alias: {
    react: path.resolve(__dirname, 'react.js')
    // the rest goes as before
  }
}
Run Code Online (Sandbox Code Playgroud)

现在创建react.js文件并将其放入内部(根据需要更改路径和名称):

var preact = require('preact-compat');

var react = {};
// Copy object properties to a new object which will allow react-hot-loader to do its magic
Object.keys(preact).forEach(function(key) {
    react[key] = preact[key];
});

module.exports = react;
Run Code Online (Sandbox Code Playgroud)

并做了!HMR现在正在运作.