初识React项目遇到的坑(Uncaught ReferenceError: Set is not defined )

本文讲述了作者在初次接触React项目时遇到的一个问题:在部分老旧设备上运行时出现“Uncaught ReferenceError: Set is not defined”的错误。通过排查,作者发现是由于这些设备的浏览器不支持ES6的Set API。解决方案是引入`babel-polyfill`,确保在不支持ES6特性的环境下也能正常运行。作者分享了如何安装和配置`babel-polyfill`以解决这个问题。

**前言:每次在android、rn跟h5中切换的时候,代码总是会闹各种笑话,比如在rn中变量都是包含在“{}”只有一层花括号,但是在vue中“{ {}}”会有两层花括号,样式的话rn是驼峰fontSize这种,但在h5中是font-size,然后在android中老喜欢把一个字符串定义为String a=‘123’,/苦笑,说多了都是泪啊,也做了1年多的rn了,总觉得自己react上手应该问题不大,哈哈,今天偶然看到app中有一个页面是用react写的,然后有一个bug,就是在部分手机(ios8、某米4)上,h5代码中一直报“Uncaught ReferenceError: Set is not defined ”,无奈只能自己去探索一下了,于是就照着react的官网创建了我的第一个react项目,哈哈~ **

怎么样创建react项目我就不在这说了哈,跟着官网走,或者网上一搜一大把,我这里的demo是直接用的react的脚手架“create-react-app”创建的,然后我开心的把项目跑起来的:

在这里插入图片描述

然后跑到我的某米四手机上的时候,一片空白,唉唉~~ 很懵逼,于是adb连接电脑,然后用谷歌浏览器调试了一下,发现报错了:

在这里插入图片描述

好吧,看到这个bug的时候,我是既惊喜又慌乱,惊喜的是“项目中的h5的bug终于是在react工程中重现了”,慌乱的是"我该怎么解决这bug呢?",“set is no defined”,很明显就是提示,set在当前js环境中不存在,set小伙伴可以自己去查一下,是es6中支持的集合对象,因为做web前端不是很久,所以之前也是隐约的知道很多浏览器对es6的兼容性不是很强,所以在创建工程的时候会导入“babel”、"babel-polyfi

### 解决方案 当在浏览器环境中引入 `React Query` 并遇到 `'process is not defined'` 错误时,通常是因为某些依赖库或工具假定存在 Node.js 的全局变量 `process`,而这些变量在现代前端框架(如 Vite 或 Create React App)中可能未被定义。 以下是针对该问题的具体解决方案: #### 方法一:通过 polyfill 定义 `process` 可以在项目的入口文件中手动定义 `process` 变量。例如,在 `src/index.js` 文件顶部添加以下代码: ```javascript if (typeof window !== 'undefined') { window.process = window.process || {}; window.process.env = window.process.env || {}; } ``` 此方法适用于简单的场景,但如果项目中有多个地方需要访问 `process`,则建议采用更全面的方式[^1]。 --- #### 方法二:使用插件自动注入 `process` 对于基于 Vite 的项目,可以安装并配置 `vite-plugin-env-compatible` 插件来兼容 `process` 和其他 Node.js 全局对象。执行以下命令安装插件: ```bash npm install vite-plugin-env-compatible --save-dev ``` 随后,在 `vite.config.js` 中进行如下配置: ```javascript import envCompatible from 'vite-plugin-env-compatible'; export default { plugins: [ env Compatible() ] }; ``` 这样可以确保在构建过程中正确处理 `process` 环境变量[^2]。 --- #### 方法三:调整 Webpack 配置(如果适用) 如果是基于旧版 `create-react-app` 构建的项目,则可以通过自定义 Webpack 配置解决问题。具体操作包括卸载当前版本的 `react-scripts` 并重新安装较早版本,以便能够通过 `eject` 曝露配置文件。之后修改 Webpack 配置以支持 `process` 聚合器[^3]。 示例配置片段如下: ```javascript const webpackConfig = { resolve: { fallback: { process: require.resolve('process/browser'), }, }, }; module.exports = webpackConfig; ``` 上述方式利用了 `process/browser` 提供的浏览器端实现替代默认行为。 --- #### 方法四:升级依赖项至最新版本 有时,错误的根本原因在于所使用的第三方库尚未完全适配现代化前端环境。因此,尝试将 `React Query` 升级到最新稳定版本,并确认其文档中是否有额外说明关于如何规避此类问题的信息。 运行以下命令完成更新: ```bash npm update react-query ``` 同时检查是否存在新的初始化选项允许禁用对 `process` 的依赖。 --- ### 总结 以上四种方法分别对应不同类型的项目架构和技术栈需求。推荐优先考虑 **方法二** 使用专门插件解决兼容性问题;而对于传统 CRA 工程可选用 **方法三** 自定义 Webpack 设置;简单快速修复可通过 **方法一** 实现临时补丁效果;最后不要忽略保持生态组件处于最佳状态的重要性即采取 **方法四** 更新策略。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值