SetInterval 导致将状态变量更新为反应中的默认值
SetInterval is causing update state variables to default values in react
我正在尝试从我的数据库中获取值(比如 X)并每 3 秒显示一个范围为 (X+2)、(X-2) 的新随机数。
默认值为
//in Reducer (Initial State)
cprice : {
"available":50,
"taken" : 0,
"total" : 50,
"price" : 50
}
数据库中的值是
cprice : {
"available":50,
"taken" : 0,
"total" : 50,
"price" : 70
}
但是当我 运行 我的代码时,我认为 SetInterval 会重新呈现组件并将 cprice 设置为默认值。这是我的代码:
useEffect(() => {
startGetCPrice()
}, []) <= gets new values for cprice
const [currentCPrice, setCurrrentCPrice] = useState(0);
useEffect(() => {
window.setInterval(() => {
console.log(cprice.price) <--- cprice.price is 50 here
setCurrrentCPrice(currentCPrice => randomCPrice(cprice.price));
},3000)
},[])
console.log(currentCPrice); <--- currentCPrice is random number near 50 here
let randomCPrice = (crpt) => {
console.log(crpt) <--- cprt is 50 here
return Math.random()*4 + crpt -2 ;
}
console.log( cprice.price) <--- cprice.price is 70 here
我得到接近 50 的随机数,但我希望每 3 秒更新一次接近数据库中值的随机数。
您的 useEffect 回调仅在第一次渲染时调用(当 currentCPrice 为默认值时),这意味着 setCurrrentCPrice 中的先前状态不是最新的
这应该可以解决您的问题
useEffect(() => {
const interval = window.setInterval(() => {
console.log(cprice.price) <--- cprice.price is 50 here
setCurrrentCPrice(currentCPrice => randomCPrice(cprice.price));
},3000)
return ()=> clearInterval(interval)
},[setCurrrentCPrice])
我正在尝试从我的数据库中获取值(比如 X)并每 3 秒显示一个范围为 (X+2)、(X-2) 的新随机数。
默认值为
//in Reducer (Initial State)
cprice : {
"available":50,
"taken" : 0,
"total" : 50,
"price" : 50
}
数据库中的值是
cprice : {
"available":50,
"taken" : 0,
"total" : 50,
"price" : 70
}
但是当我 运行 我的代码时,我认为 SetInterval 会重新呈现组件并将 cprice 设置为默认值。这是我的代码:
useEffect(() => {
startGetCPrice()
}, []) <= gets new values for cprice
const [currentCPrice, setCurrrentCPrice] = useState(0);
useEffect(() => {
window.setInterval(() => {
console.log(cprice.price) <--- cprice.price is 50 here
setCurrrentCPrice(currentCPrice => randomCPrice(cprice.price));
},3000)
},[])
console.log(currentCPrice); <--- currentCPrice is random number near 50 here
let randomCPrice = (crpt) => {
console.log(crpt) <--- cprt is 50 here
return Math.random()*4 + crpt -2 ;
}
console.log( cprice.price) <--- cprice.price is 70 here
我得到接近 50 的随机数,但我希望每 3 秒更新一次接近数据库中值的随机数。
您的 useEffect 回调仅在第一次渲染时调用(当 currentCPrice 为默认值时),这意味着 setCurrrentCPrice 中的先前状态不是最新的
这应该可以解决您的问题
useEffect(() => {
const interval = window.setInterval(() => {
console.log(cprice.price) <--- cprice.price is 50 here
setCurrrentCPrice(currentCPrice => randomCPrice(cprice.price));
},3000)
return ()=> clearInterval(interval)
},[setCurrrentCPrice])