在componentWillUnmount中清理.throttle()' d回调

时间:2016-02-10 11:10:30

标签: reactjs lodash

我有以下设置:

componentDidMount() {
  Dispatcher.on('app:update', _.throttle(this.postLoad, 1000));
}

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

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

.throttle来自Lodash。

1 个答案:

答案 0 :(得分:0)

您很可能会看到在超时的后沿调用您的限制函数。为了说明这一点,我们来看看throttle()的默认行为:

var throttled = _.throttle(function() { 
  console.log('ran'); 
}, 1000);

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

// → ran
// → ran

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

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

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

var throttled = _.throttle(function() { 
  console.log('ran'); 
}, 1000, { trailing: false });