首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使检测到更新,HMR HMR也不会呈现。

即使检测到更新,HMR HMR也不会呈现。
EN

Stack Overflow用户
提问于 2018-10-14 13:18:10
回答 1查看 967关注 0票数 1

我的index.jsx中有以下内容

代码语言:javascript
复制
const store = configureStore();
const MOUNT_NODE = document.getElementById('root');

const render = () => {
  ReactDOM.render(
    <Provider store={store}>
      <Routes />
    </Provider>,
    MOUNT_NODE,
  );
};

if (module.hot) {
  module.hot.accept('routes.jsx', () => {
    ReactDOM.unmountComponentAtNode(MOUNT_NODE);
    render();
  });
}
render();

这将呈现最初的应用程序。现在,当我更改任何文件时,我会在浏览器的控制台中获得以下日志。

代码语言:javascript
复制
[HMR] bundle rebuilding
[HMR] bundle rebuilt in 285ms
[HMR] Checking for updates on the server...
[HMR] Updated modules:
[HMR]  - ./src/js/components/SomeComponent/SomeComponent.jsx
[HMR]  - ./src/js/components/App.jsx
[HMR]  - ./src/js/routes.jsx
[HMR] App is up to date.

此日志表明已检测到更新,并更新了模块。此外,我在"network“选项卡中看到一个新脚本被加载,<head>标记闪烁,显示它加载了新脚本。我检查了脚本,它包含了我的更改。

然而,我没有看到我的页面更新。整个页面进行快速闪存,以显示render()函数被调用,但不存在更改。

我正在使用我的大部分HMR和webpack的设置从https://github.com/react-boilerplate/react-boilerplate

我不知道该在哪里找出发生了什么事。任何帮助都是非常感谢的。

编辑:

我刚刚发现module.hot.accept()只被调用了一次,这是第一次更新。这不是我第二次修改文件的时候。

编辑2:

当我尝试使用module.hot.accept(() => {})时,它似乎正常工作,但是减速器不起作用,我得到了以下错误:

提供程序不支持动态更改store。您很可能会看到此错误,因为您更新到Redux2.x并响应Redux2.x,不再自动重新加载热减速器。有关迁移说明,请参见https://github.com/reactjs/react-redux/releases/tag/v2.0.0

所以,我能做任何事情的唯一方法就是有两个module.hot.accept,一个用App.jsx,另一个用reducers.jsx。仍然找不出到底出了什么问题。

EN

回答 1

Stack Overflow用户

发布于 2019-05-25 15:25:48

我也有同样的问题

对未来的任何人来说,你试过这个吗?

代码语言:javascript
复制
//My root component (that also use redux), but can be any component one by one in case you want to specific compontents with hot reload


import {hot} from "react-hot-loader/root"
import React, { Component } from 'react';
import { BrowserRouter as Router } from 'react-router-dom'
import { Provider } from "react-redux"
import { ExtReact } from '@sencha/ext-react' 

import store from "./redux/store"
import Layout from './Layout';

// Enable responsiveConfig app-wide. You can remove this if you don't plan to build a responsive UI.

/**
 * The main application view
 */



class App extends Component {
  render() {
    return (
      <Router>
        <Provider store={store}>
          <Layout />
        </Provider>
      </Router>
    );
  }
}

export default hot(App);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52803065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档