Javascript 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。-反应
所以我试图声明一个状态,然后进行API调用,然后设置状态,但是我遇到了Javascript 错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。-反应,javascript,reactjs,Javascript,Reactjs,所以我试图声明一个状态,然后进行API调用,然后设置状态,但是我遇到了错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。发生这种情况的原因可能有以下几种:错误。我已经检查了我的react版本和react dom,它很好,我没有react的两个副本。以下是我的代码的简化版本: function RandomScreen(){ const [State, setState] = useState([]) let history = useHistory() v
错误:无效的钩子调用。钩子只能在函数组件的主体内部调用。发生这种情况的原因可能有以下几种:
错误。我已经检查了我的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
hookuseffect
回调不能是异步的。首先定义异步函数,然后调用它。
将此更改为:
useEffect( () => {
async function apiCall() {
// Make API call
}
apiCall()
.then(function(response){
setState(response.data)
})
},[])
这不太管用,但是谢谢你试着帮助我!据我所知,您发布的代码中没有任何内容是“无效的钩子调用”,因此此错误可能来自其他地方。也许张贴错误的全部内容。(堆栈跟踪)你能在沙箱中重现这个问题吗?如果没有,这个问题很可能在重新安装依赖项后得到修复(删除package-lock.json和node_模块,并重新安装deps-back.PS:删除文件时要小心)。