ChatGPT解决这个技术问题 Extra ChatGPT

'React' must be in scope when using JSX react/react-in-jsx-scope?

I am an Angular Developer and new to React , This is simple react Component but not working

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;

Error : 'React' must be in scope when using JSX react/react-in-jsx-scope


p
patrick

The import line should be:

import React, { Component }  from 'react';

Note the uppercase R for React.


how to avoid it. I mean when I create a stateless function, in Nextjs it does not require it
@MuhaiminCS change the rule in your eslintrc file
it actualy for older version of React. for newer it not need. right anwere is bellow. by Paul Razvan Berg "rules": { ... "react/react-in-jsx-scope": "off" ... }
G
GorvGoyl

Add below setting to .eslintrc.js / .eslintrc.json to ignore these errors:

  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
  }

Why? If you're using NEXT.js then you do not require to import React at top of files, nextjs does that for you.

Ref: https://gourav.io/blog/nextjs-cheatsheet (Next.js cheatsheet)


NextJs user here, thanks for this. Given adding the rule "react/react-in-jsx-scope": "off" will eliminate the error, what does adding globals accomplish? Thanks!
Note that it'll be "hard" to test your components if React isn't imported, though. In such case, your test file will need to import it, if your component doesn't.
@GorvGoyl Even after doing this, the build fails with the same error. Any idea how to suppress that?
P
Paul Razvan Berg

If you're using React v17, you can safely disable the rule in your eslint configuration file:

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

Thanks great, small note, I think it's preferable to follow the 0 (off), 1 (warning) and 2 (error) convention over using "off". To keep the config more coherent.
Choosing either 0 or "off" is a matter of opinion.
Ah I honestly didn't realise all numbers mapped to a string equivalent as well... my mistake. So you can actually do "off, warning, error" or "0, 1, 2".
A
Ankit Pandey

For those who still don't get the accepted solution :

Add

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

at the top of the file.


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

This is a spelling error, you need to type React instead of react.


This exact answer awas already provided as the accepted answer.
J
James Gentes

If you'd like to automate the inclusion of import React from 'react' for all files that use jsx syntax, install the react-require babel plugin:

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

Add react-require into .babelrc. This plugin should be defined before transform-es2015-modules-commonjs plugin because it's using ES2015 modules syntax to import React into scope.

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

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


S
Saurabh Bhatia

The error is very straight forward, you imported react instead of React.


J
JayMGurav

add "plugin:react/jsx-runtime" to extends in your eslint config file, refer react-in-jsx-scope


M
MD SHAYON

In my case, I had to include this two-line in my index.js file from the src folder.

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

In your case, this might be different. You may need to include components if you're using class-based components.

import React, { Component }  from 'react';

Alternatively, If you are using eslint you can get some solutions from the above comments.

know more


a
avalanche1

If you are running React 17+ (and in 2022, I assume, that you are) - you need to add the following line to your .eslintrc:

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

Then only import React once in your top-level file, like App.jsx - and no need to import it anywhere else, unless you need an api like useEffect etc.


V
Vishnu

When using the react framework, you first need to import the react from react and always keep the first letter of react in uppercase after import.

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

This is an error caused by importing the wrong module react from 'react' how about you try this: 1st

import React , { Component}  from 'react';

2nd Or you can try this as well:

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

Follow as in picture for removing that lint error and adding automatic fix by addin g--fix in package.json

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


B
Boshra Jaber

I had a similar error, what solved it for me is importing React in every component, although I am using React18

import React from 'react';

V
Vishnu

Whenever we make a custom component in React using JSX, it is transformed into backward-compatible JS code with the help of Babel.
Since the JSX compiles into React.createElement, the React library must also always be in scope.

Example:

This custom component:

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

is transformed into:

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

Since the converted code needs the React library, we need to import it into the scope.

React Docs Reference

Fix: Import React

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

Pick one, it depends on the user!

NOTE:
As of React 17+, we are free from doing such import, but it's better to add the imports just to be on the safe side because errors can be generated because of ESLint!

One can disable the rule in the ESLint config file (.eslintrc.json) to ignore these errors:

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

A
Arian Nargesi

Upgrading the react-scripts version to latest solved my problem.

I was using the react-scripts version 0.9.5 and upgrading it to 5.0.1 did the job.


L
Lakruwan Pathirage

One thing that I noticed is that import React from "react"; should be there instead of import react , { Component} from 'react'; Other Things I have done is,

(1) added below lines to index.js file.

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

if not worked add this line for ReactDOM import ReactDOM from "react-dom/client"; instead of import ReactDOM from 'react-dom'

(2) change following properties for eslint configuration file.

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

But Starting from React 17,Dont need to add import React from 'react' and next js as well


Y
YaaKouB

The line below solved this problem for me.

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

hope this help you.