经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » webpack » 查看文章
使用webpack配置react-hot-loader热加载局部更新
来源:jb51  时间:2023/1/18 8:41:58  对本文有异议

webpack配置react-hot-loader热加载局部更新

有人会问 webpack-dev-server 已经是热加载了,能做到只要代码修改了页面也自动更新了,为什么在 react 项目还要安装 react-hot-loader 呢?

其实这两者的更新是有区别的,webpack-dev-server 的热加载是开发人员修改了代码,代码经过打包,重新刷新了整个页面。

而 react-hot-loader 不会刷新整个页面,它只替换了修改的代码,做到了页面的局部刷新。

但它需要依赖 webpack 的 HotModuleReplacement 热加载插件。

下面来说说怎么来配置 react-hot-loader 。

步骤1

安装 react-hot-loader 

  1. npm install --save-dev react-hot-loader

步骤2

在 webpack.config.js 的 entry 值里加上 react-hot-loader/patch,一定要写在entry 的最前面,如果有 babel-polyfill 就写在

babel-polyfill 的后面。

  1. entry: [
  2. 'babel-polyfill',
  3. 'react-hot-loader/patch', //设置这里
  4. __dirname + '/app/main.js'
  5. ]

步骤3

在 webpack.config.js 中设置 devServer 的 hot 为 true

  1. devServer: {
  2. contentBase: './build',
  3. port: '1188',
  4. historyApiFallback: true,
  5. inline: true,
  6. hot: true, //设置这里
  7. },

步骤4

在 .babelrc 里添加 plugin

  1. {
  2. "presets": ['es2015', 'react'],
  3. "plugins": ["react-hot-loader/babel"] //设置这里
  4. }

步骤5

在 webpack.config.js 的 plugins 里添加依赖的 HotModuleReplacement 插件

  1. plugins: [
  2. new HtmlWebpackPlugin({
  3. template: __dirname + "/app/index.tmpl.html"
  4. }),
  5. new webpack.HotModuleReplacementPlugin() //设置这里
  6. ]

步骤6

最后这个操作就是在项目的主入口,比如我的是 main.js 添加些代码

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import Greeter from './greeter';
  4. import "./main.css";
  5. import { AppContainer } from 'react-hot-loader'; //设置这里
  6. const render = (App) => {
  7. ReactDOM.render(
  8. <AppContainer>
  9. <App />
  10. </AppContainer>,
  11. document.getElementById('root')
  12. )
  13. }
  14. render(Greeter)
  15. // Hot Module Replacement API
  16. if (module && module.hot) {
  17. module.hot.accept('./greeter', () => {
  18. render(require('./greeter').default)
  19. })
  20. }

简写成这样试了一下也能成功

  1. import React from 'react';
  2. import ReactDOM from 'react-dom';
  3. import App from './app';
  4. import "./main.css";
  5. ReactDOM.render(
  6. <App />,
  7. document.getElementById('root')
  8. )
  9. if (module && module.hot) {
  10. module.hot.accept()
  11. }

按顺序做完上面6个步骤,恭喜你,React 的 react-hot-loader 已经配置好了。

react-hot-loader热加载不生效的可能问题

如果是下面这样,就不会执行热加载

  1. const AsyncLogin = asyncComponent(() => import("./Login")); //我不能热加载
  2. import home from './home' ?//我能热加载
  3. <Route exact path='/' component={home}/>
  4. <Route ? path='/login' component={AsyncLogin}/>
  5. <Route ? path='/home' component={home}/>

也就是说需要同步引入组件才可以局部热加载成功

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号