webpack5实现局部更新

传送门:
https://www.npmjs.com/package/react-hot-loader

安装依赖

npm install react-hot-loader @hot-loader/react-dom

babel.config.js

添加react-hot-loader/babel配置
如果需要使用@hot注解(本配置不需要),需要安装@babel/plugin-proposal-decorators

// babel for jest
module.exports = {
    presets: [
        ['@babel/preset-env'],
        [
            '@babel/preset-react',
            {
                runtime: 'automatic'
            }
        ]
    ],
    plugins: [
        '@babel/plugin-transform-runtime',
        '@babel/plugin-proposal-class-properties',
        [
            '@babel/plugin-proposal-decorators',
            {
                legacy: true
            }
        ],
        'react-hot-loader/babel'
    ]
};


webpack.dev.js

增加alias和entry配置(仅多页应用配置即可,单页应用不生效)
1、entry 中添加react-hot-loader/patch
2、增加alias

     resolve: {
            alias: {
                ...commonConfig.resolve.alias,
                'react-dom': '@hot-loader/react-dom'
            }
        },

针对单页应用配置

最好是在路由中配置
对组件进行包裹hot(module)(component)

/**
 * @param App 入口组件
 * @param menu 组件菜单信息 code:菜单标识,name:页面标题
 * @param action
 * @param initialState
 * @returns {JSX.Element}
 * @constructor
 */

import React from 'react';
import DMPage from './DMPage';
import { hot } from 'react-hot-loader';

const MainLayout = props => {
    const { route } = props;
    const { menu } = route;
    // 增加局部更新逻辑
    const Comp = hot(module)(route.component);
    return menu?.remove ? (
        <Comp {...props} />
    ) : (
        <DMPage {...menu}>
            <Comp {...props} />
        </DMPage>
    );
};

export default MainLayout;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值