Вы можете создать статическую переменную и использовать ее в getDerivedStateFromProps
методе жизненного цикла.
Здесь intervalTimer
- это переменная, доступная внутри статического метода.
Вот рабочий код:-
import React from "react";
import ReactDOM from "react-dom";
let intervalTimer = "";
class App extends React.PureComponent {
state = {
stop: false
};
componentDidMount() {
intervalTimer = setInterval(() => {
console.log("interval going on");
}, 3000);
}
handleClick = () => {
this.setState({ stop: true });
};
static getDerivedStateFromProps(props, state) {
if (state.stop) {
clearInterval(intervalTimer);
}
return null;
}
render() {
return (
<div>
<button onClick={this.handleClick}>Stop interval</button>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
Или вы могли бы также использовать статическую переменную вместо глобальной переменной
static intervalTimer = ''
componentDidMount() {
App.intervalTimer = setInterval(() => {
console.log("interval going on");
}, 3000);
}
static getDerivedStateFromProps(props, state) {
if (state.stop) {
clearInterval(App.intervalTimer);
}
return null;
}
Оба подхода будут работать очень хорошо.
Надеюсь, это поможет !!!