我试图构建一个react组件,它显示基于API响应的随机数。但是我注意到显示的数字被无限地重新呈现,并且当我检查服务器控制台时,它接收到来自react的无限请求。如何解决这个问题?我正在使用react状态来显示数字。
API随机数. js
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function (req, res, next) {
let randomNumber = Math.floor(Math.random() * 100);
res.send({
"number": randomNumber
})
});
module.exports = router;
React组件
import react, { useEffect, useState } from "react"
import axios from 'axios'
interface Props {
}
export default function RandomNumber(props: Props) {
const [number, setNumber] = useState(0);
axios({
method: "get",
url: "/api/random-number",
}).then(
((result) => {
setNumber(result.data.number)
})
)
return (
<>
<h1>{number}</h1>
</>
)
}
我希望服务器对每个请求返回1个随机数,并将呈现该数字。
2条答案
按热度按时间aiqt4smr1#
你必须在useEffect Hook中做副作用,或者你可以使用像TANstack查询等这样的库,但这取决于情况,像这样一个简单的库应该可以完成这项工作...
axios
调用,它会设置一个新状态,从而导致再次重新渲染,并且重复相同的循环,从而导致无限的请求cnh2zyt32#
您不能像在示例中那样更新状态,因为每次
setState
调用都会触发重新呈现,并再次重新计算代码,最终进入无限循环。相反,您应该使用useEffect挂钩和空依赖项数组调用获取逻辑“onComponentMount”: