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 

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.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.hot) {
  10. module.hot.accept()
  11. }

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值