为什么在 react js 中使用 setInterval 生成随机数据而不是在某些秒后生成?
why Generating random data using setInterval in react js not Generating after certain seconds?
我正在尝试在 react.but 中生成随机数据 数据开始移动,就像在 1 秒后 1 个条目然后在另一秒后 5 个条目然后 26 然后 126 等等意味着每秒数据呈指数增长 generate.But 我只想在 1 秒后生成 1 条记录
function App() {
const [pktD,setPktD]=useState({
chid:0,
peakVal:0,
})
const dataGen=setInterval( function(){
setPktD({...pktD,chid:Math.random()*253});
setPktD({...pktD,peakVal:Math.random()*10000})
},5000)
console.log(dataGen);
return (
<></>
);
}
我也尝试在自定义挂钩中实现,但面对相同的 problem.First 条目在 5 秒后生成,但之后数据生成随机间隔。
myCustom hook 在下面我也试过了。
import React ,{useState} from "react"
function DataGenerator(){
const [pktD,setPktD]=useState({
chid:0,
peakVal:0
})
const dataGen=function(){
setPktD({...pktD,chid:Math.random()*253});
setPktD({...pktD,peakVal:Math.random()*10000})
return pktD
}
return [dataGen];
}
export default DataGenerator;
你可以这样做
import React, { useState, useEffect } from "react";
function App() {
const [pktD, setPktD] = useState({
chid: 0,
peakVal: 0
});
useEffect(() => {
const dataGen = setInterval(function () {
// setPktD({ ...pktD, chid: Math.random() * 253 });
// setPktD({ ...pktD, peakVal: Math.random() * 10000 });
setPktD((prevState) => ({...prevState, chid: Math.random() * 253, peakVal: Math.random() * 10000}));
}, 5000);
return () => {
clearInterval(dataGen);
}
}, []);
console.log(pktD);
return <></>;
}
export default App;
因为你没有清除间隔,所以也在 useEffect 中使用,因为它是 运行 异步的。
我正在尝试在 react.but 中生成随机数据 数据开始移动,就像在 1 秒后 1 个条目然后在另一秒后 5 个条目然后 26 然后 126 等等意味着每秒数据呈指数增长 generate.But 我只想在 1 秒后生成 1 条记录
function App() {
const [pktD,setPktD]=useState({
chid:0,
peakVal:0,
})
const dataGen=setInterval( function(){
setPktD({...pktD,chid:Math.random()*253});
setPktD({...pktD,peakVal:Math.random()*10000})
},5000)
console.log(dataGen);
return (
<></>
);
}
我也尝试在自定义挂钩中实现,但面对相同的 problem.First 条目在 5 秒后生成,但之后数据生成随机间隔。 myCustom hook 在下面我也试过了。
import React ,{useState} from "react"
function DataGenerator(){
const [pktD,setPktD]=useState({
chid:0,
peakVal:0
})
const dataGen=function(){
setPktD({...pktD,chid:Math.random()*253});
setPktD({...pktD,peakVal:Math.random()*10000})
return pktD
}
return [dataGen];
}
export default DataGenerator;
你可以这样做
import React, { useState, useEffect } from "react";
function App() {
const [pktD, setPktD] = useState({
chid: 0,
peakVal: 0
});
useEffect(() => {
const dataGen = setInterval(function () {
// setPktD({ ...pktD, chid: Math.random() * 253 });
// setPktD({ ...pktD, peakVal: Math.random() * 10000 });
setPktD((prevState) => ({...prevState, chid: Math.random() * 253, peakVal: Math.random() * 10000}));
}, 5000);
return () => {
clearInterval(dataGen);
}
}, []);
console.log(pktD);
return <></>;
}
export default App;
因为你没有清除间隔,所以也在 useEffect 中使用,因为它是 运行 异步的。