React 项目热更新失效问题的解决方案和产生的原因

news/2024/10/25 4:40:43/

背景和意义

在修复React项目热更新失效的问题时,经过一系列问题排查和依赖升级,最终成功修复了问题并为后续开发规避了类似的问题。

依赖升级

Vite版本升级

原React项目Vite版本升级到^4.4.5

Vite 4 在构建和开发服务器的性能上进行了优化,提升了启动速度和热更新速度,并且修复了特殊情况下热更新问题。

npm install vite@^4.4.5

@vitejs/plugin-react版本升级

如只升级Vite,删除node_modules重新安装依赖会报版本兼容错误,错误如下

@vitejs/plugin-react 升级到^4.3.2

npm i -D eslint-plugin-react-refresh

编码注意事项

由于如下编码习惯问题同样会引起局部热更新无法工作

  1. 未保证一致的组件出口,为了保证热更新工作,你必须保证Tsx文件只导出React组件

Fast Refresh | Gatsby

Tsx文件呈现 React 组件,但也导出由非 React 组件导入的值。例如,组件文件还导出一个常量,并且ts文件导入它。在这种情况下,请考虑将常量迁移到单独的文件并将其导入到两个文件中。这将重新启用快速刷新功能。其他情况通常也可以用类似的方法解决。

具体报错示例

代码出处:

  1. Tsx文件使用匿名导出组件,也会引起热更新失效,swr-graphql/issues Anonymous arrow functions cause Fast Refresh to not preserve local component state. · Issue #6 · praveenweb/swr-graphql · GitHub

好的写法

预防方案

增加使用Eslint检查

GitHub - ArnaudBarre/eslint-plugin-react-refresh: Validate that your components can safely be updated with fast refresh

  1. 安装eslint-plugin-react-refresh

npm i -D eslint-plugin-react-refresh
  1. 找到eslint配置文件,增加如下内容

{"plugins": ["react-refresh"],"rules": {"react-refresh/only-export-components": "warn"}
}

你亦或者可以选择“error”的警示方式,排查写法

Eslint全局排查解决

npm run lint

最后,在解决了热更新失效的问题后,我们运行了 npm run lint 命令进行全局排查和解决潜在的代码问题。

通过以上的依赖升级、编码注意事项和预防措施,我们成功修复了 React 项目热更新失效的问题,并且为后续开发规避了类似的问提。


http://www.ppmy.cn/news/1541742.html

相关文章

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中,语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出,语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息,还是将播客内容转化为文本,…

Leetcode—1242. 多线程网页爬虫【中等】Plus(多线程)

2024每日刷题&#xff08;187&#xff09; Leetcode—1242. 多线程网页爬虫 实现代码 /*** // This is the HtmlParsers API interface.* // You should not implement it, or speculate about its implementation* class HtmlParser {* public:* vector<string>…

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

二、Linux 入门教程:开启大数据领域的神奇之旅

Linux 入门教程&#xff1a;开启大数据领域的神奇之旅 在当今这个飞速发展的数字化时代&#xff0c;大数据所具有的重要性正日益凸显出来。而 Linux 作为一种极为强大的操作系统&#xff0c;在大数据这一广阔的领域当中发挥着至关重要、不可或缺的关键作用。倘若你怀有涉足大数…

Kafka 为什么要抛弃 Zookeeper?

嗨&#xff0c;你好&#xff0c;我是猿java 在很长一段时间里&#xff0c;ZooKeeper都是 Kafka的标配&#xff0c;现如今&#xff0c;Kafka官方已经在慢慢去除ZooKeeper&#xff0c;Kafka 为什么要抛弃 Zookeeper&#xff1f;这篇文章我们来聊聊其中的缘由。 Kafka 和 ZooKee…

WebGl 多缓冲区和数据偏移

1.多缓冲区 多缓冲区技术通常涉及到创建多个缓冲区对象&#xff0c;并将它们用于不同的数据集。这种做法可以提高数据处理效率&#xff0c;尤其是在处理大量数据或需要频繁更新数据时。通过预先分配和配置多个缓冲区&#xff0c;可以在不影响渲染性能的情况下&#xff0c;快速…

【C++指南】运算符重载详解

引言 C 提供了运算符重载这一特性&#xff0c;允许程序员为自定义类型&#xff08;如类和结构体&#xff09;定义运算符的行为。 通过运算符重载&#xff0c;可以使自定义类型对象像内置类型一样使用运算符&#xff0c;从而提高代码的可读性和易用性。 本文将详细介绍 C 中运算…

光通信——前传基本架构

一、前传基本架构 第三代移动通信技术引入了分布式射频接入网络&#xff08;Distributed Radio Access Network &#xff0c; D-RAN&#xff09;架构。在此架构中的的基带处理单元&#xff08; Baseband Unit &#xff0c; BBU&#xff09; 和 射频拉远单元&#xff08; Remot…