Вместо опроса каждого 100ms
лучше использовать некоторый механизм Publish-Subscribe .Этот механизм позволяет вам «уведомлять» ваш компонент о необходимости его обновления вместо постоянной (и избыточной) проверки необходимости обновления.
События в JavaScript являются хорошим примером шаблона публикации-подписки.
Есть много способов реализовать это, но вот базовый пример концепции:
// This class is utilizing the publish-subscribe pattern
class ProgressUpdater {
static subscribers = [];
static publish(progress) {
this.subscribers.forEach(s => s(progress));
}
static subscribe(subscriber) {
this.subscribers.push(subscriber);
}
}
Тогда ваш процесс должен опубликовать свой прогресс, вызвав:
ProgressUpdater.publish(progress);
И ваш компонент должен subscribe
к событию обновления прогресса в componentDidMount
:
class App extends React.Component {
state = {progress: 0}
componentDidMount() {
ProgressUpdater.subscribe(progress => {
this.setState({progress});
})
}
render() {
return (
<div className='progress'>Progress: {this.state.progress}</div>
)
}
}
Вот скрипка , чтобы увидеть, как все это работает вместе