React没有绑定函数调用,尽管有相反的警告
React is not binding function call despite warnings to the contrary
我有一个React组件,它需要在setTimeout()
调用中运行检查。下面是我的方法调用
componentDidUpdate: function () {
// Despite console warnings, React does *not* do this.
var boundCheck = this.checkYourself.bind(this);
if (!this.timeoutId) {
this.timeoutId = window.setTimeout(function () {
boundCheck();
}, UPDATE_CHECK_INTERVAL);
}
},
这将在控制台上产生以下警告:
bind():您正在将一个组件方法绑定到该组件。React以高性能的方式自动为您执行此操作,因此您可以安全地删除此调用。
但是,如果我将方法更改为以下内容:
componentDidUpdate: function () {
if (!this.timeoutId) {
this.timeoutId = window.setTimeout(function () {
this.checkYourself();
}, UPDATE_CHECK_INTERVAL);
}
},
我得到一个异常,因为this
指的是window
。有没有办法做到这一点,让React感到高兴?
您需要在setTimeout
:中绑定函数
componentDidUpdate: function () {
if (!this.timeoutId) {
this.timeoutId = window.setTimeout(function () {
this.checkYourself();
}.bind(this), UPDATE_CHECK_INTERVAL);
}
},
this.checkYourself()
现在应该按预期调用该组件。
由于版本0.4,React自动绑定您在createClass中创建的所有方法并将其绑定到正确的上下文,您只需要在createClass中声明一个方法并直接调用setTimeout(this.method, 1000)
。
https://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html
您也可以使用箭头功能来实现这一点:
this.timeoutId = setTimeout(() => {
this.checkYourself();
}, UPDATE_CHECK_INTERVAL);
用反应v0.14.6
测试
相关文章:
- 在VanillaJS中模拟模型双向数据绑定
- 无法通过数组映射绑定
- 主干-不管怎样,检查事件以前是否绑定过
- 用于搜索的聚合物嵌套绑定
- Angular:更新一次性绑定的数据
- 如何使用ngrepeat和双向绑定获得指令的隔离范围
- react.js中的密钥绑定
- 使用regex的jquery keydown绑定不会验证撇号和句点
- 将事件处理程序绑定到任何可能的事件
- AngularJS指令只识别双向绑定类型
- Telerik rad组合框多列数据绑定
- 对API数据使用声明性绑定
- 如何销毁/删除/取消绑定SnapSVG.js
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 数据绑定:'系统Char'不包含名为'xxxxx'
- react组件中的绑定方法
- 如何将ngrepeat下的ngmodel绑定到$scope
- WinJS内联绑定语法
- React没有绑定函数调用,尽管有相反的警告
- 在ReactJS中对子组件的绑定发出警告