首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清理componentWillUnmount中的.throttle()d回调

清理componentWillUnmount中的.throttle()d回调
EN

Stack Overflow用户
提问于 2016-02-10 19:10:30
回答 1查看 304关注 0票数 1

我有以下设置:

代码语言:javascript
复制
componentDidMount() {
  Dispatcher.on('app:update', _.throttle(this.postLoad, 1000));
}

componentWillUnmount() {
  Dispatcher.removeListener('app:update', this.postLoad)
}

但是,我在控制台中收到了关于尝试在未挂载的组件上调用setState的错误(发生在postLoad内部)。在componentWillUnmount中取消限制功能的最佳选择是什么?

.throttle来自洛达什

EN

回答 1

Stack Overflow用户

发布于 2016-02-11 00:16:35

您很可能会看到在超时的尾部调用您的节流函数。为了说明这一点,让我们看一下throttle()的默认行为

代码语言:javascript
复制
var throttled = _.throttle(function() { 
  console.log('ran'); 
}, 1000);

for (var i = 0; i < 3; i ++) {
  throttled();
}

// → ran
// → ran

这很奇怪,有两个电话打给了throttled()。循环实际上进行了三次调用,但预期是由于它被限制为1秒,所以应该只有一次调用。

默认情况下,throttle()的尾随选项设置为true。这意味着在超时过后,将再次调用节流函数-假设它是在超时开始之后结束之前调用的。

在您的案例中,简单的解决方案可能是关闭此选项,如下所示:

代码语言:javascript
复制
var throttled = _.throttle(function() { 
  console.log('ran'); 
}, 1000, { trailing: false });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35313556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档