Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。-反应_Javascript_Reactjs - Fatal编程技术网

Javascript 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。-反应

Javascript 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。-反应,javascript,reactjs,Javascript,Reactjs,所以我试图声明一个状态,然后进行API调用,然后设置状态,但是我遇到了错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。发生这种情况的原因可能有以下几种:错误。我已经检查了我的react版本和react dom,它很好,我没有react的两个副本。以下是我的代码的简化版本: function RandomScreen(){ const [State, setState] = useState([]) let history = useHistory() v

所以我试图声明一个状态,然后进行API调用,然后设置状态,但是我遇到了
错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。发生这种情况的原因可能有以下几种:
错误。我已经检查了我的react版本和react dom,它很好,我没有react的两个副本。以下是我的代码的简化版本:

function RandomScreen(){
    const [State, setState] = useState([])
    
    let history = useHistory()
    var style = require('./Random.css')
    
    useEffect(async function(){
        // Make API call
        .then(function(response){
            setState(response.data)
        })
    }, [])
    
    async function handleClick(){
        // Make API call
        // Set State again
    }
    return (
        // Some HTML code
    )
}
App.js

function App(){
    return (
        <Router>
          <Switch>
            <Route path="/random">
              <RandomScreen />
            </Route>
          </Switch>
        </Router>
    )
}
函数应用程序(){
返回(
)
}

经过一些调试,我发现问题的原因是
let history=useHistory()
,但我需要
useHistory
hook

useffect
回调不能是异步的。首先定义异步函数,然后调用它。 将此更改为:

useEffect( () => {
    
    async function apiCall() {
        // Make API call
    }
    
    apiCall()
        .then(function(response){
            setState(response.data)
        })
},[])    

这不太管用,但是谢谢你试着帮助我!据我所知,您发布的代码中没有任何内容是“无效的钩子调用”,因此此错误可能来自其他地方。也许张贴错误的全部内容。(堆栈跟踪)你能在沙箱中重现这个问题吗?如果没有,这个问题很可能在重新安装依赖项后得到修复(删除package-lock.json和node_模块,并重新安装deps-back.PS:删除文件时要小心)。