Полагаю, вы уже проверили, что current < refs.length
на самом деле оценивается как true
? Это было бы первое место, куда я посмотрю, но у меня недостаточно информации, чтобы это проверить. Хороший способ проверить это - удалить тернарный оператор, использовать if-else и добавить console.log или запустить отладчик и выполнить пошаговое выполнение.
Затем имейте в виду, что в строке ниже:
current < refs.length - 1 ? setCurrent(prevVal => prevVal + 1) : setCurrent(0)
значение current
и prevVal
может быть другим, если несколько состояний набора происходят в одном рендере. Если вы знаете, что этого не произойдет, вы можете сделать это.
current < refs.length - 1 ? setCurrent(current + 1) : setCurrent(0)
При этом я бы рекомендовал просто сделать это так, чтобы вы не закрывали значение последнего рендера:
setCurrent(prevVal => {
return prevVal < refs.length - 1 ? prevVal + 1 : 0;
});
Но, вероятно, это не ваша ошибка. Полагаю, на ваш setCurrent(prevVal => prevVal + 1)
никогда не позвонят.