Я загружаю несколько животных в свой проект ThreeJS. У всех этих животных есть PositionalAudio с функцией setInterval. Я использую их внутри функции useEffect. При обратном вызове я хочу очистить интервал, но он продолжает вызывать функцию.
Это функция, в которой я устанавливаю свой setInterval:
const loadAudio = () => {
const animalSound = new THREE.PositionalAudio(listener);
animalSound.setBuffer(animalBuffer);
playSounds = setInterval(() => {
animalSound.play();
} , 5000);
audios.push(animalSound);
}
В функции возврата я пытаюсь очистить интервал:
return () => {
audios.forEach((audio) => {
audio.stop();
clearInterval(playSounds);
});
};
К сожалению, звук продолжает воспроизводиться каждые 5 секунд.
Вот фрагмент кода
@AbuSufian Я сделаю фрагмент кода
Согласно вашему фрагменту кода, скажем, у вас есть кнопка:
<button
onClick = {buttonToggle}
>
{start ? 'start' : 'stop'}
</button>
Изначально у нас есть некоторая настройка для useState и функция обработки щелчка.
const [seconds, setSeconds] = useState(0);
const [btnStart, setBtnStart] = useState(true);
const buttonToggle = useCallback(
() => setBtnStart(run => !run)
, []);
В useEffect вы сделаете следующие изменения
useEffect(() => {
if (!btnStart) {
// setSeconds(0); // if you want to reset it as well
return;
}
const interval = setInterval(() => {
setSeconds(seconds => seconds + 1);
}, 1000);
return () => clearInterval(interval);
}, [btnStart]);
не могли бы вы добавить весь фрагмент кода useEffect.