useEffect(() => {
setInterval(() => {
success({coords : {latitude: Math.random()*51, longitude: Math.random()*2.6}});
}, 5000);
}, []);
Пустой массив, как говорит второй параметр, реагирует на создание этого эффекта только один раз и никогда не обновляет его. Когда он создан, он имеет ссылку на функцию успеха в своем закрытии, а эта функция успеха в свою очередь имеет ссылку на coords
. Поскольку это все с первого рендера, coords
- пустой массив.
Так что каждый раз, когда вы вызываете success
, вы добавляете новые координаты в этот пустой массив и вызываете setCoords. Массив никогда не увеличивается, потому что вашей отправной точкой всегда является пустой массив. И вы никогда не увидите новые массивы, потому что они существуют только при более поздних рендерах.
Самое простое решение для этого - использовать функциональную версию setCoords. React вызовет функцию и передаст последнее значение координаты
const success = (position) => {
setCoords(prevCoords => {
return [
...prevCoords,
position.coords
]
})
}