【发布时间】:2021-05-10 12:01:05
【问题描述】:
我是使用 react 和 Axios 的新手,我已经创建了一个 get 请求,我可以用一个按钮调用它一次,但是我不想要这个按钮,而是希望在页面加载/使用页面,以便用户可以立即看到它。但是当调用我的函数时,一旦它被连续调用并崩溃网络浏览器,我不明白为什么会发生这种情况,我用谷歌搜索,我找不到任何东西。这是运行的代码。
厨房.js
import React from 'react';
import { Container } from 'react-bootstrap';
// import Axios from 'axios';
import { Link } from 'react-router-dom';
import GetFood from './getFood';
export default function Kitchen() {
return(
<Container>
<div>
<h1>This is the kitchen portal</h1>
<Link to='/gettingfood'><button>Get Food</button></Link>
<Link to="/addingfood"><button>Add food</button></Link>
<Link to="/deletefood"><button>Delete Food</button></Link>
</div>
<GetFood/>
</Container>
);
}
GetFood.js
import React, { useState } from 'react';
import Axios from 'axios';
export default function GetFood() {
const [responseData, setResponseData] = useState([])
// fetches data
async function fetchData(){
await Axios.get("http://localhost:3001/getfood").then((response)=>{
setResponseData(response.data);
console.log(response.data);
alert("Information received!")
})
.catch((error) => {
console.log(error)
})
}
fetchData();
return (
<div>
<button onClick={fetchData}>Get</button>
{responseData.map((val,key)=>{
return (
<div>
<div id="data">
<p>Item:{val.item}</p>
<p>Price:{val.price}</p>
</div>
</div>
)
})}
</div>
)
}
【问题讨论】:
-
你每次渲染组件时调用
fetchData,这会更新responseData,它会重新渲染组件,它调用fetchDat,它...见reactjs.org/docs/hooks-effect.html。跨度> -
正确的做法是使用 useEffect 钩子。就像@jonrsharpe 建议的那样,浏览文档,这些是反应的基础。了解渲染如何在反应中工作。
-
好的,谢谢,我没有意识到
标签: javascript reactjs axios get runtime-error