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

标签 reactjs babeljs webpack-2 react-hot-loader preact

描述

您报告的内容:我正在关注此 set of instructions关于如何设置 React 热加载器。但是,当我转到放置补丁的第 3 步时,它会出现以下情况。

预期行为

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

实际行为

image

环境

React Hot Loader 版本:下一个

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

  1. 节点-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

分支:wip-hot-reloader

说明:

  • yarn
  • 安装后运行 yarn
  • yarn 运行开始:dev

最佳答案

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

您收到的错误是由于 react-hot-loader/patch 需要实际的 react 模块并使用以下命令修补其 createElement 函数一个新的。 在这里查看:react-hot-loader/lib/patch.dev.js:179

主要问题是在 webpack config react 模块已解析为 preact-compat,这显然不允许设置新值,因此热重载无法一起运行。

希望这能回答您的问题。就这样 - 我认为热重载在该设置中不起作用。

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

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

现在创建 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;

完成了! HMR 现已运行。

关于reactjs - 无法设置属性 createElement of#<Object>,它只是一个 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44229429/

相关文章:

reactjs - 如何在 React Hooks 中更改 props 到 state?

css - 如何修复当输入类型从 "text"更改为 "type"时更改的 Form.control 输入宽度?

javascript - Browserify 转换顺序

javascript - 用于从 CDN 导入的代码拆分块的 Webpack 设置

docker - 使用webpack-dev-server从webpack 2代理请求到docker容器中的后端api

javascript - 在 React 中构建大型列表时 UI 滞后几秒钟

reactjs - 无法在React中执行react状态

javascript - 如何在 TypeScript 中使用第 3 阶段的功能?

webpack - 开 Jest 不解析 es6 : SyntaxError: Unexpected token import

javascript - css-loader URL root 不修改 url