【发布时间】:2019-07-01 06:53:12
【问题描述】:
正如您在下面的代码中看到的,我每 100 毫秒检查一次(使用 setInterval)是否对 convertProgress 进行了更改,如果是,则组件需要更新。
class TradingThing extends React.Component {
componentDidMount() {
const { convertProgress, setConvertProgress } = this.props.store; // mobx store
this.interval = setInterval(() => {
if(convertProgress < 100) {
setConvertProgress(Math.min(convertProgress + 5, 100));
}
, 100);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return (
<div>Progress from MobX state: {this.props.store.convertProgress}</div>
);
}
}
我该如何处理? 每100ms调用一个空函数可以吗?
注意:我不允许在render、componentWillUpdate、componentDidUpdate 和getSnapshotBeforeUpdate 中调用setStatefunction。
【问题讨论】:
-
为什么必须每 100 毫秒调用一次?进度完成就不能触发事件吗?
-
@YoavKadosh 感谢您的关注。我需要根据
prop从false更改为true来重置计时器。我想知道每 100 毫秒计数的成本。 :D -
您是否可以利用某种发布-订阅机制?这将比使用
setInterval更高效 -
@YoavKadosh 抱歉。 “发布-订阅”是什么意思?
-
发布 - 订阅模式。您可以使用它在需要更新时“通知”您是组件,而不是每 100 毫秒轮询一次。有点像 JavaScript 中事件的工作方式。一旦进度 = 100,将触发一个事件,并且您的组件(将监听该事件)将在那时更新。
标签: reactjs performance setinterval