Пара вещей: то, что вы передаете clearInterval
, должно быть возвращаемым значением от setInterval
;в первом примере вы передаете ему свою собственную функцию. Второй пример имеет это право, но вы сохраняете timer
(результат вызова setInterval
) в области действия функции переключения, что означает, что после завершения функции вы теряете ссылку на нее;в следующий раз, когда вы вызываете функцию (например, чтобы остановить ее), вы переопределяете timer
, а это не то, что вам нужно.
Все, что вам нужно, - это сохранить переменную timer
в области, где она будет сохраняться. Например:
let timer = null;
const handleToggle = () => {
if (AppState.countingStarted) {
dispatch({
type: "COUNTING_STARTED",
payload: false
});
clearInterval(timer);
} else {
timer = setInterval(() => {
dispatch({ type: "COUNT", payload: Date.now() - startTime });
}, 100);
const startTime = Date.now() - AppState.runningTime;
dispatch({ type: "COUNTING_STARTED", payload: true });
}
};
Эта функция может вызываться несколько раз;переменная timer
будет сохраняться повсюду.