У меня проблемы с головой при обновлении массива во время таймера в хуке useEffect:
const [data, setData] = useState(0)
const [priceList, setPriceList] = useState([])
const [profit, setProfit] = useState(0)
useEffect(() => {
let value = 1000
const update_value = () => {
if (Math.random() >= 0.5 || value - Math.floor(Math.random() * 500) + 100 < 0) {
return value += Math.floor(Math.random() * 500) + 100
}
return value -= Math.floor(Math.random() * 500) + 100
}
const price_fluctuation = (d) => {
if (priceList.length < 2) {
setPriceList([d, ...priceList])
return d
} else {
let oldList = [...priceList]
oldList.pop()
setPriceList([d, ...oldList])
return d - priceList[1]
}
}
const timer = () => {
let totalTimer = (5 * 60 + 1) * 1000
let timerId = setInterval(
() => {
const current_price = update_value()
setData(current_price)
setProfit(price_fluctuation(current_price))
}, 5000);
setTimeout(() => { clearInterval(timerId); }, totalTimer);
}
timer()
}, [])
Функция price_fluctuation принимает текущую цену и добавляет ее в массив, который затем устанавливается на priceList. Функция предназначена для хранения не более двух цен: текущей и предыдущей. Однако priceList никогда не устанавливается во время таймера, я считаю, что это потому, что priceList всегда инициализируется пустым массивом.
Что я могу сделать, чтобы моя функция работала должным образом во время таймера. Кажется, я что-то неправильно понимаю.