Seit React Mixins jetzt veraltet sind, hier ist ein Beispiel für eine Komponente höherer Ordnung, die eine andere Komponente umschließt, um die gleiche Funktionalität wie in der akzeptierten Antwort beschrieben zu erhalten. Es räumt sauber alle verbleibenden Timeouts beim Unmounten auf und gibt der untergeordneten Komponente eine API, um diese über Requisiten zu verwalten.
Dies verwendet ES6 Klassen und component composition, welche die empfohlene Methode ist Mixins in 2017.
In Timeout.jsx
import React, { Component } from 'react';
const Timeout = Composition => class _Timeout extends Component {
constructor(props) {
super(props);
}
componentWillMount() {
this.timeouts = [];
}
setTimeout() {
this.timeouts.push(setTimeout.apply(null, arguments));
}
clearTimeouts() {
this.timeouts.forEach(clearTimeout);
}
componentWillUnmount() {
this.clearTimeouts();
}
render() {
const { timeouts, setTimeout, clearTimeouts } = this;
return <Composition
timeouts={timeouts}
setTimeout={setTimeout}
clearTimeouts={clearTimeouts}
{ ...this.props } />
}
}
export default Timeout;
In MyComponent.jsx
import React, { Component } from 'react';
import Timeout from './Timeout';
class MyComponent extends Component {
constructor(props) {
super(props)
}
componentDidMount() {
// You can access methods of Timeout as they
// were passed down as props.
this.props.setTimeout(() => {
console.log("Hey! I'm timing out!")
}, 1000)
}
render() {
return <span>Hello, world!</span>
}
}
// Pass your component to Timeout to create the magic.
export default Timeout(MyComponent);
zu ersetzen es ist immer noch nur JS, du machst es genauso wie du es ohne React machen würdest. –
'clearTimeout' funktioniert, wenn Sie die Timer-ID speichern. – WiredPrairie