在函数“ app”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义的React Hook函数

Bis*_*hnu 58 reactjs react-hooks

我正在尝试使用React钩子解决一个简单的问题

const[personState,setPersonState]=  useState({DefinedObject});
Run Code Online (Sandbox Code Playgroud)

具有以下依赖性。

"dependencies": {
 "react": "^16.8.6",
 "react-dom": "^16.8.6",
 "react-scripts": "3.0.0"
}
Run Code Online (Sandbox Code Playgroud)

但我仍然收到以下错误:

./src/App.js

第7行:
在函数“ app”中调用React Hook“ useState”,该函数既不是React函数组件也不是自定义的React Hook函数react-hooks / rules-of-hooks

第39行: 未定义
“状态”

搜索关键字以了解有关每个错误的更多信息。

小智 141

尝试将“ app”大写,例如

const App = props => {...}

export default App;
Run Code Online (Sandbox Code Playgroud)

  • 这是在应用程序中很难找到的错误,我认为应该在错误消息中添加另一条注释来指出这种可能性。 (9认同)
  • 原因是在[规则挂钩ESLint插件](https://github.com/facebook/react/blob/c11015ff4f610ac2924d1fc6d569a17657a404fd/packages/eslint-plugin-react-hooks/src/RulesOfHooks.js)中是检查组件或函数名称是否有效的检查:`检查节点是否为React组件名称。React组件名称必须始终以非小写字母开头。 (5认同)
  • 在App中将A大写对我有用...但我不是在想为什么max在udemy课程中没有出现此错误? (2认同)
  • 相同的问题“为什么max没有出现任何错误?我将“ app”更改为“ App”,现在对我有用! (2认同)

Tua*_*han 22

我觉得我们在乌迪米(Udemy)正在做同样的课程。

如果是这样,请大写

const app

const App

做的以及

export default app
Run Code Online (Sandbox Code Playgroud)

export default App
Run Code Online (Sandbox Code Playgroud)

这对我来说很有用。

  • 是的,我认为这使我们三个人都做同样的事情。为什么区分大小写? (2认同)
  • 这应该被标记为正确答案。默认情况下,“主要组件”名称必须大写。还要记住导入名称大写的组件。错误:从 './Compo' 导入 compo;右:从 './Compo' 导入 Compo;因为 React 将大写的 JSX 标签识别为 React 组件。 (2认同)

小智 22

React 组件(函数式和类)必须以大写字母开头。喜欢

const App=(props)=><div>Hey</div>

class App extends React.Component{
   render(){
     return <div>Hey</div>
   }
}
Run Code Online (Sandbox Code Playgroud)

React 通过遵循此语义识别用户定义的组件。React 的 JSX 转换为 React.createElement 函数,该函数返回 dom 节点的对象表示。这个对象的 type 属性告诉它是一个用户定义的组件还是一个 dom 元素,比如 div。因此,遵循此语义很重要

由于 useState 钩子只能在功能组件(或自定义钩子)中使用,这就是您收到错误的原因,因为 react 无法首先将其识别为用户定义的组件。

useState 也可以在用于可重用性和逻辑抽象的自定义钩子中使用。所以根据hook的规则,自定义hook的名字必须以“use”前缀开头,并且必须是驼峰式


小智 19

使用 const App 而不是 const app


Pra*_*arg 16

尝试将您的应用名称大写

const App = props => {...}

export default App;
Run Code Online (Sandbox Code Playgroud)


ale*_*rya 14

据我所知,该包装中包含了短绒棉。并且它要求您的组件应该从大写字母开始。请检查一下。

然而,对我而言,这是可悲的。


小智 12

函数的第一个字符应该是大写


小智 9

use first letter capital in the function name. eg:- function App{}


小智 9

函数名必须以大写字母开头

例如:

const App = props => {

}
Run Code Online (Sandbox Code Playgroud)

不是常量应用程序


小智 7

你有正确的进口吗?

import React, { useState } from 'react';
Run Code Online (Sandbox Code Playgroud)


小智 7

您将收到此错误:“在函数“ App”中调用了React Hook“ useState”,它既不是React函数组件也不是自定义的React Hook函数“

解决方案:您基本上需要将功能大写。

例如:

const Helper =()=>{}

function Helper2(){}
Run Code Online (Sandbox Code Playgroud)


小智 6

组件应以大写字母开头。还记得更改要导出的行中的第一个字母!

  • 你的问题似乎没有答案。达到 50 次代表后,您将可以对问题发表评论。如果您的回答是**是一个答案,请尝试改进它。例如,为什么组件应该以大写字母开头?另外,其他答案已经说过了,你有什么新的吗? (3认同)

Ali*_*rki 6

React 组件名称应大写,自定义钩子函数应以use关键字开头,以标识为 react 钩子函数。

因此,将您的应用程序组件大写为App


小智 5

我遇到过同样的问题。原来是在“ App”中将“ A”大写的问题。此外,如果要导出,请export default App;确保也导出相同名称的“ App”。


小智 5

你的代码

import React, {useState} from 'react'; 
import './App.css'; 
import Person from './Person/Person'; 

const app = props => { 
    const [personState, setPersonSate] = useState({ person:[ {name:'bishnu',age:'32'}, {name:'rasmi',age:'27'}, {name:'fretbox',age:'4'} ], }); 
    return (
        <div className="App"> 
            <h2>This is react</h2> 
            <Person name={personState.person[1].name} age="27"></Person>
            <Person name={personState.person[2].name} age="4"></Person> 
        </div> ); 
    };
    export default app;
Run Code Online (Sandbox Code Playgroud)

通过使函数名称大写来改变它,像这样

import React, {useState} from 'react'; 
import './App.css'; 
import Person from './Person/Person'; 

const App = props => { 
    const [personState, setPersonSate] = useState({ person:[ {name:'bishnu',age:'32'}, {name:'rasmi',age:'27'}, {name:'fretbox',age:'4'} ], }); 
    return (
        <div className="App"> 
            <h2>This is react</h2> 
            <Person name={personState.person[1].name} age="27"></Person>
            <Person name={personState.person[2].name} age="4"></Person> 
        </div> ); 
    };
    export default App;
Run Code Online (Sandbox Code Playgroud)

它会工作谢谢。