我是一个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'必须在作用域中
将以下设置添加到.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 (下一页.js备忘单)
这是由于从'react'导入错误的模块react而导致的错误,您试试这个如何:
1日
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;
如果你想为所有使用jsx语法的文件自动包含import React from ' React ',请安装React -require babel插件:
npm install babel-plugin-react-require --save-dev
在.babelrc中添加react-require。这个插件应该在transform-es2015-modules-commonjs插件之前定义,因为它使用ES2015模块语法将React导入作用域。
{
"plugins": [
"react-require"
]
}
来源:https://www.npmjs.com/package/babel-plugin-react-require
在我的例子中,我必须在src文件夹的index.js文件中包含这两行代码。
import React from 'react'
import ReactDOM from 'react-dom'
在你的情况下,这可能是不同的。
如果使用基于类的组件,则可能需要包含组件。
import React, { Component } from 'react';
或者,如果你正在使用eslint,你可以从上面的注释中得到一些解决方案。
知道更多
在使用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;
每当我们使用JSX在React中创建自定义组件时,它都会在Babel的帮助下转换为向后兼容的JS代码。
因为JSX编译成React。createElement, React库也必须始终在作用域中。
例子:
这个自定义组件:
<MyButton color="blue" shadowSize={2}> Click Me </MyButton>
转化为:
React.createElement(MyButton, {color: 'blue', shadowSize: 2}, 'Click Me')
^^^^^
由于转换后的代码需要React库,我们需要将其导入作用域。
React Docs参考
修复:导入React
import React from 'react';
// or
import * as React from 'react';
选择一个,这取决于用户!
注意:
从React 17+开始,我们就不用做这样的导入了,但是为了安全起见,最好还是添加导入,因为ESLint会产生错误!
你可以在ESLint配置文件(.eslintrc.json)中禁用该规则来忽略这些错误:
"rules": {
"react/react-in-jsx-scope": "off"
}
我注意到的一件事是从“React”导入React;应该在那里,而不是import react, {Component} from 'react';
我做过的其他事情是,
(1)添加以下行到index.js文件。
import React from 'react'
import ReactDOM from 'react-dom'
如果没有工作,添加这一行从“react-dom/client”导入ReactDOM;而不是从'react-dom'导入ReactDOM
(2)修改eslint配置文件的以下属性。
rules: {
"react/react-in-jsx-scope": "off",
}
但是从React 17开始,不需要添加import React from ' React '和next js
对我来说,我有这个问题,一旦我使用npm审计fix -force,所以它降级反应脚本到版本2,它迫使我安装eslint版本5,问题开始泛滥,为了解决这个问题,我更新了一次反应脚本,事情解决了。
还要确保你的eslint包含这些规则
module.exports = {
extends: ['react-app', 'react-app/jest', 'airbnb', 'prettier'],
plugins: ['prettier'],
rules: {
...
// React scope no longer necessary with new JSX transform
'react/react-in-jsx-scope': 'off',
// Allow .js files to use JSX syntax
'react/jsx-filename-extension': ['error', { extensions: ['.js', '.jsx'] }],
...
},
}