当前位置:首页 > 编程语言 > 正文内容

如何修复React Must Be in Scope When Using *** X错误

a811625532年前 (2023-11-02)编程语言19

使用 有时会很棘手,尤其是在处理不容易理解的错误时。

开发人员可能会遇到的一个常见错误是 React must be in scope when using jsX 错误。如果在使用 的组件中没有正确导入或初始化 React,就会出现这种错误。

在本文中,我们将讨论导致该错误的原因,并提供如何修复该错误的解决方案。

React must be in scope when using *** X错误的原因是什么?

*** X(JavaScript XML)是一种语法扩展,允许您在 JavaScript 中编写类似 的代码。浏览器不理解 *** X,但像 Create React app 这样的预配置工具包在引擎盖下包含了一个 *** X 转换工具,可以将 *** X 代码转换为有效的 JavaScript 代码,浏览器可以解释这些代码。

在 17.0 之前的 React 版本中, *** X 转换器会在编译时将 *** X 转换为 React.createElement() 函数调用。这需要导入 React 才能使用 React 元素。在 React v17.0 中引入了新的 *** X 转换后,React 包的新入口点中的特殊函数将被自动导入,从而无需在每个显式使用 *** X 的文件中导入 React。

举例来说,让我们来看看下面的功能组件:

function App() {
return <h1>Welcome to WBOLT!</h1>;
}

在编译时,它会被转换成普通的 JavaScript:

function App() {
return React.createElement('h1', null, 'Welcome to WBOLT!');
}

由于 React 是未定义的,因此在使用 jsx 时总会出现 “‘react’ must be in scope when using jsx” 的错误。

修复react must be in scope when using jsx错误的 2 种 ***

根据您使用的 React 版本,有几种 *** 可以修复此错误。

  • React v17 之前历史版本
  • React v17 及更高版本

1. 包含或更正 React 导入声明(针对 React v17 之前版本的修复)

如果您使用的是旧版本的 React,则可能缺少 “react” 的导入语句或导入语句不正确。请确保文件顶部有正确的导入语句(”React” 上有大写的 “R”):

// Wrong 
import react  from 'react';
// Correct 
import React  from 'react';

将功能组件转换为普通 后,就会变成这样:

import React  from 'react';
function App() {
return React.createElement('h1', null, 'Welcome to WBOLT!');
}

2. 更新 ESLint 配置(针对 React v17 及更高版本的修复)

在 React v17.0 中,引入了,它会自动从 React 包的新入口导入特殊函数,从而无需在每个显式使用 *** X 的文件中导入 React。

例如,下面是一个功能组件:

function App() {
return <h1>Welcome to WBOLT!</h1>;
}

这就是新的 *** X 转换编译成的内容:

// Inserted by a compiler (don't import it yourself!)
import {jsx as _jsx} from 'react/jsx-runtime';
function App() {
return _jsx('h1', { children: 'Welcome to WBOLT!' });
}

这意味着您不再需要在组件中导入 React 以使用 *** X。如果您在检查 package.json 文件以确认 React 版本后仍然收到此错误,则必须更新 。

在这个阶段,从技术上讲,这不再是 React 错误,而是 ESLint 错误。

注:您经常会在 React 项目中使用 ESLint 等线程工具,因为它会检查您的代码以检测潜在的错误,这些错误可能会在现在或将来破坏您的代码。该工具会在检测到文件周围有任何 *** X 时强制您导入 React。

如果您确定自己的 React 版本是 v17.0 或更高,那么就可以安全地禁用确保您在 React 中使用 *** X 时导入 React 的规则。

更新 ESLint 配置有两种主要方式。如果你有 .eslintrc.js.eslintrc.json 文件。在 .eslintrc.js 文件中添加以下规则。

"rules": {
// ...
"react/react-in-jsx-scope": "off",
"react/jsx-uses-react": "off",
}

否则,你可以更新 package.json 文件中的 eslintConfig 对象:

{
"name": "quotes-circle",
// ...
"dependencies": {
// ...
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
],
"rules": {
"react/jsx-uses-react": "off",
"react/react-in-jsx-scope": "off"
}
},
}

在上面的代码中, 规则已关闭,因此 ESLint 不会在你导入 React 失败时抛出错误。

至此,你应该已经彻底解决了 “‘react’ must be in scope when using jsx” 的错误。但也有可能因为某些原因,错误仍然存在。

让我们再看看几种修复 *** 。

修复react must be in scope when using jsx错误的其他3种 ***

假设错误仍然存在。以下是解决 “‘react’ must be in scope when using jsx” 错误的另外三种 *** 。

1. 更新 React-Scripts 的版本

在终端运行以下命令即可更新项目的 react-scripts 版本:

// npm
npm install react-scripts@latest
// yarn
yarn add react-scripts@latest

2. 删除 Node_modules 文件夹和 package-lock.json 文件

如果错误仍然存在,则可能是某些依赖项安装错误。你可以删除 node_modules 文件夹和 package-lock.json 文件(不是 package.json)来解决这个问题。然后运行以下命令重新安装软件包:

npm install

然后重启开发服务器。

3. 更新 React 和 React-Dom 的版本

最后,如果错误仍然存在,请使用下面的命令更新 reactreact-dom 的版本:

// npm
npm install react@latest react-dom@latest
// if you use TypeScript
npm install --save-dev @types/react@latest @types/react-dom@latest
// OR
// Yarn
yarn add react@latest react-dom@latest
// if you use TypeScript
yarn add @types/react@latest @types/react-dom@latest --dev

目前可以肯定的是,这一错误将得到修复。

小结

“React must be in scope when using *** X” 错误是在使用 React 时可能遇到的常见问题。当文件中使用了 *** X 语法,但未正确导入或包含 React 库时,此错误主要发生在 React v17 的早期版本中。在 React v17 的较高版本中,当 ESLint 配置出错或 node_modules 文件夹中的某些依赖项安装错误时,也会出现该错误。

根据您正在使用的 React 版本,您可以使用不同的 *** 来修复此错误,我们在文章中对此进行了概述。

现在轮到你了: 您遇到过这个问题吗?你是如何解决的?你还使用过本文未涉及的其他 *** 吗?请在评论中告诉我们!

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/8084.html

分享给朋友:

“如何修复React Must Be in Scope When Using *** X错误” 的相关文章

宝塔面板教程之软件管理篇

宝塔面板教程之软件管理篇

宝塔面板提供丰富的软件以一键安装,这让服务器环境搭建提供不少的便利性,站长可以根据实际需求快速编译安装以实现不同的功能需求。 软件管理,主要是宝塔提供的一些面板扩展插件。 Nginx Nginx是一个高性能的HTTP和反向代理服务器,具有轻量级、占用内存小,并发能力强等优势。 w...

15种最佳编程字体以帮助您更愉悦地敲代码

15种最佳编程字体以帮助您更愉悦地敲代码

经过几个小时的努力工作后,您是否感到眼睛疲劳或难以阅读代码?许多程序员在开始头疼之前从没想过要切换字体。 如果您经常发现在尝试扫描一千行代码时眼睛模糊不清,或者在停止编码数小时后头疼,那么可能是时候尝试一种新字体了。即使您没有遇到这些症状,设计良好的字体通常也比默认系统字体具有更好的可读性。...

20个最佳Laravel免费和付费教程资源

20个最佳Laravel免费和付费教程资源

Laravel多年来一直是PHP应用程序开发的摇滚明星,这是有充分理由的。庞大的生态系统、活跃的社区、强大的就业市场、成功的初创公司——它拥有一切让采用新技术变得值得的东西。 如果你想学习Laravel,你不需要更进一步。通过浏览本指南,您可以找到最适合您的Laravel教程,与您的知识水平和...

Cloudflare即将完全弃用Host API集成

Cloudflare即将完全弃用Host API集成

Cloudflare已宣布弃用HOST API集成,这将影响Cloudflare的传统主机和经销商合作伙伴。 Cloudflare弃用HOST API Cloudflare Legacy Host API将于2022年11月1日正式被弃用。Cloudflare表示,由于支持和维护程序...

什么是React以及它实际上是如何工作的?

什么是React以及它实际上是如何工作的?

是用于移动和Web应用程序开发的最流行的库之一。React由Facebook创建,包含一组可重用的JavaScript代码片段,用于构建称为组件的用户界面 (UI)。 重要的是要注意ReactJS不是JavaScript框架。那是因为它只负责渲染应用程序视图层的组件。React是和等框架的替代...

什么是JSON:理解语法、存储JSON数据、示例

什么是JSON:理解语法、存储JSON数据、示例

JSON(JavaScript Object Notation)是一种为数据交换而设计的基于文本的文件格式。它表示基于JavaScript对象语法的结构化数据。因此,JavaScript程序可以将JSON数据转换为原生JavaScript对象,而无需解析或序列化数据。 JSON因其自描述、易于...