我对React相对较新,正在学习它。我试图使用axios
获得一个新的帖子。但是当我点击'/getPost'
URL时,GetPost
组件正在不断调用后端。这是预期的行为吗?
下面是代码片段:
// important imports
import React from 'react'
import { BrowserRouter as Router,Route, Routes }
from 'react-router-dom';
import './App.css';
import Create from './component/Create';
import Edit from './component/Edit';
import GetPost from './component/GetPost';
import Home from './component/Home';
function App () {
return (
<div className='App'>
<Router>
<Routes>
<Route path ='' element= {<Home></Home>}> </Route>
<Route path ='/edit' aelement= {<Edit/>}> </Route>
<Route path='/create' element= {<Create/>}></Route>
<Route path='/getPost' element= {<GetPost/>}></Route>
</Routes>
</Router>
</div>
)
}
export default App;
import React, { useState } from 'react';
import axios from 'axios';
const GetPost = () => {
const [person, setPerson] = useState([]);
axios.get(`https://jsonplaceholder.typicode.com/users`)
.then(res => {
console.log(res.data);
setPerson(res.data);
})
return (
person.map(p =>
<div>
{p.id}
</div>
)
)
}
export default GetPost;
3条答案
按热度按时间kcwpcxri1#
这是因为
axios
在GetPost
内部调用。它在组件挂载时执行,并通过调用setPerson(res.data)
设置状态,这将触发重新渲染,然后axios
部分被重新执行,这将是永远的。为了避免这个问题,你需要使用React中的
useEffect
钩子,比如:iugsix8n2#
如何在useEffect中获取数据,如下所示?
我猜GetPost组件不断被调用的原因是您更新了组件中的状态,这导致重新呈现组件,如这里所解释的。
zaq34kh63#
在UseEffect中调用API来解决此问题-
另外,你在你的App.js中做了如下的修改: