ChatGPT解决这个技术问题 Extra ChatGPT

使用 JSX react/react-in-jsx-scope 时,'React' 必须在范围内?

我是 Angular 开发人员和 React 新手,这是简单的 React 组件,但无法正常工作

import react , { Component}  from 'react';
import         { render   }  from 'react-dom';

class TechView extends Component {

    constructor(props){
       super(props);
       this.state = {
           name:'Gopinath'
       }
    }
    render(){
        return(
            <span>hello Tech View</span>
        );
    }
}

export default TechView;

错误:使用 JSX react/react-in-jsx-scope 时,“React”必须在范围内


p
patrick

导入行应为:

import React, { Component }  from 'react';

注意 React 的大写 R。


如何避免它。我的意思是当我创建一个无状态函数时,在 Nextjs 中它不需要它
@MuhaiminCS 更改 eslintrc 文件中的规则
它实际上适用于旧版本的 React。对于较新的它不需要。正确的答案如下。 Paul Razvan Berg “规则”:{ ... “react/react-in-jsx-scope”:“off” ... }
G
GorvGoyl

将以下设置添加到 .eslintrc.js / .eslintrc.json 以忽略这些错误:

  rules: {
    // suppress errors for missing 'import React' in files
   "react/react-in-jsx-scope": "off",
    // allow jsx syntax in js files (for next.js project)
   "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx"] }], //should add ".ts" if typescript project
  }

为什么? 如果您使用 NEXT.js,则不需要在文件顶部导入 React,nextjs 会为您完成。

参考:https://gourav.io/blog/nextjs-cheatsheet(Next.js 备忘单)


NextJs 用户在这里,谢谢。鉴于添加规则 "react/react-in-jsx-scope": "off" 将消除错误,添加 globals 完成了什么?谢谢!
请注意,如果没有导入 React,那么测试您的组件将是“困难的”。在这种情况下,如果您的组件不需要,您的测试文件将需要导入它。
@GorvGoyl 即使这样做了,构建也会失败并出现同样的错误。知道如何抑制它吗?
P
Paul Razvan Berg

如果你使用 React v17,你可以在你的 eslint 配置文件中安全地禁用该规则:

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

非常感谢,小提示,我认为最好遵循 0(关闭)、1(警告)和 2(错误)约定而不是使用“关闭”。使配置更加连贯。
选择 0 或“关闭”是一个见仁见智的问题。
啊,老实说,我并没有意识到所有数字也都映射到了等价的字符串……我的错误。所以你实际上可以做“关闭、警告、错误”或“0、1、2”。
A
Ankit Pandey

对于那些仍然没有得到接受的解决方案的人:

添加

import React from 'react'
import ReactDOM from 'react-dom'

在文件的顶部。


A
AkaZecik
import React, { Component } from 'react';

这是拼写错误,您需要输入 React 而不是 react


这个确切的答案已经作为接受的答案提供。
J
James Gentes

如果您想为所有使用 jsx 语法的文件自动包含 import React from 'react',请安装 react-require babel 插件:

npm install babel-plugin-react-require --save-dev

将 react-require 添加到 .babelrc 中。这个插件应该在 transform-es2015-modules-commonjs 插件之前定义,因为它使用 ES2015 模块语法将 React 导入范围。

{
  "plugins": [
    "react-require"
  ]
}

来源:https://www.npmjs.com/package/babel-plugin-react-require


S
Saurabh Bhatia

错误非常直接,您导入了 react 而不是 React。


J
JayMGurav

"plugin:react/jsx-runtime" 添加到您的 eslint 配置文件中的扩展,请参阅 react-in-jsx-scope


M
MD SHAYON

就我而言,我必须在 src 文件夹中的 index.js 文件中包含这两行。

import React from 'react'
import ReactDOM from 'react-dom'

在您的情况下,这可能会有所不同。如果您使用基于类的组件,则可能需要包含组件。

import React, { Component }  from 'react';

或者,如果您使用 eslint,您可以从上述评论中获得一些解决方案。

know more


a
avalanche1

如果您正在运行 React 17+(我假设您是 2022 年)- 您需要将以下行添加到您的 .eslintrc 中:

{
  "extends": ["plugin:react/jsx-runtime"]
}

然后只在您的顶级文件中导入 React 一次,如 App.jsx - 无需在其他任何地方导入它,除非您需要像 useEffect 等的 api。


V
Vishnu

使用react框架时,首先需要从react中导入react,导入后始终保持react首字母大写。

import React, {Component} from 'react'`
import React, { Component} from 'react';
import { render }  from 'react-dom';

class TechView extends Component {

    constructor(props){
       super(props);
       this.state = {
           name:'Gopinath'
       } 
    }
    render(){
        return(
            <span>hello Tech View</span>
        );
    }
}
export default TechView;

L
Lamech Desai

这是由导入错误模块引起的错误 react from 'react' 你试试这个:1st

import React , { Component}  from 'react';

第二或者你也可以试试这个:

import React from 'react';
import { render   }  from 'react-dom';

class TechView extends React.Component {

    constructor(props){
       super(props);
       this.state = {
           name:'Gopinath',
       }
    }
    render(){
        return(
            <span>hello Tech View</span>
        );
    }
}

export default TechView;

N
Nike

如图所示,通过在 package.json 中添加 g--fix 来删除该 lint 错误并添加自动修复

https://i.stack.imgur.com/F7Is0.png


B
Boshra Jaber

我遇到了类似的错误,为我解决的问题是在每个组件中导入 React,尽管我使用的是 React18

import React from 'react';

V
Vishnu

每当我们使用 JSX 在 React 中制作自定义组件时,它都会在 Babel 的帮助下转换为向后兼容的 JS 代码。
由于 JSX 编译为 React.createElement,{2库也必须始终在范围内。

例子:

这个自定义组件:

<MyButton color="blue" shadowSize={2}> Click Me </MyButton>

转化为:

React.createElement(MyButton, {color: 'blue', shadowSize: 2}, 'Click Me')
^^^^^

由于转换后的代码需要 React 库,因此我们需要将其导入作用域。

React Docs Reference

修复:导入反应

import React from 'react';
// or
import * as React from 'react';

选择一个,这取决于用户!

注意:
从 React 17+ 开始,我们不再进行此类导入,但为了安全起见,最好添加 imports,因为 ESLint 可能会生成错误!

可以禁用 ESLint 配置文件 (.eslintrc.json) 中的规则以忽略这些错误:

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

A
Arian Nargesi

将 react-scripts 版本升级到最新版本解决了我的问题。

我正在使用 react-scripts 版本 0.9.5 并将其升级到 5.0.1 完成了这项工作。


L
Lakruwan Pathirage

我注意到的一件事是从“react”导入 React;应该在那里而不是 import react , { Component} from 'react'; 我所做的其他事情是,

(1) 在 index.js 文件中添加以下行。

import React from 'react'
import ReactDOM from 'react-dom'

如果不起作用ReactDOM import ReactDOM from "react-dom/client"; 添加此行而不是 import ReactDOM from 'react-dom'

(2) 更改 eslint 配置文件的以下属性。

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

但是从 React 17 开始,也不需要添加 import React from 'react' 和 next js


Y
YaaKouB

下面的行为我解决了这个问题。

/** @jsx jsx */
import {css, jsx} from "@emotion/react";

希望这对你有帮助。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅