反应热加载器 3

Posted

技术标签:

【中文标题】反应热加载器 3【英文标题】:React Hot Reloader 3 【发布时间】:2016-08-13 14:06:51 【问题描述】:

我正在尝试新的React Hot Loader 3,但收到一条警告消息:

warning.js:44 警告:React.createElement:类型不应为空, 未定义、布尔值或数字。它应该是一个字符串(对于 DOM 元素)或 ReactClass(用于复合组件)。检查渲染 AppContainer的方法。

这是应用程序文件。出了什么问题?Ps:它的编写方式与示例相同。Ps2:问题不在 App 中,因为它在 render() 之外的if 语句Ps3:警告仅在浏览器尝试“热重载”时出现(当我对任何文件进行更改时)

import React from 'react';
import  render  from 'react-dom';
import  AppContainer  from 'react-hot-loader';
import a11y  from 'react-a11y'
import Store from './stores/Store';
import App from './components/App/App';

const store = new Store();

if(process.env.NODE_ENV === 'development')
  a11y(React);


render(
  <AppContainer
    component=App
    props= store 
  />,
  document.getElementById('root')
);

if (module.hot) 
  module.hot.accept('./components/App/App', () => 
    render(
      <AppContainer
        component=require('./components/App/App').default
        props= store 
      />,
      document.getElementById('root')
    );
  );

【问题讨论】:

不应该 component=require('./components/App/App').default 只是 component=App 吗?再次要求同一个组件(内联,请注意)并尝试使用 .default 属性的目的是什么? 在 Dan 示例中是这样写的。如果我更改为 component=App 我不会收到错误,但组件也不会热重载。 我明白了...这是对 hotloader 工作方式的某种重大升级,它在 alpha atm 中...您能否验证您的 package.json 文件中的 hotloader 版本以及您的插件webpack/babel 配置中的 /entry 数组? 它与另一个 babel 插件 (add-module-exports) 冲突。我已经删除了它,现在它可以工作了。 【参考方案1】:

好的,问题出在我的 .babelrc 文件上。我有一些其他的插件,我已经删除了,它工作正常:


  "presets": ["es2015-loose", "react", "stage-1"],

  "plugins": [
    "react-hot-loader/babel",
    "transform-decorators-legacy"
  ],

【讨论】:

如果您列出您删除的插件会更有帮助。

以上是关于反应热加载器 3的主要内容,如果未能解决你的问题,请参考以下文章

Java类加载器(ClassLoader)

Android类加载器和热修复原理

Android类加载器和热修复原理

Java 热加载

Android 代码热修复详解

Android 使用类加载器原理实现热修复