实例v中的react.js中的状态variables
在react.js中,将超时引用存储为实例variables(this.timeout)还是状态variables(this.state.timeout)会更好吗?
React.createClass({ handleEnter: function () { // Open a new one after a delay var self = this; this.timeout = setTimeout(function () { self.openWidget(); }, DELAY); }, handleLeave: function () { // Clear the timeout for opening the widget clearTimeout(this.timeout); } ... })
要么
React.createClass({ handleEnter: function () { // Open a new one after a delay var self = this; this.state.timeout = setTimeout(function () { self.openWidget(); }, DELAY); }, handleLeave: function () { // Clear the timeout for opening the widget clearTimeout(this.state.timeout); } ... })
这两种方法都有效。 我只想知道使用其中一个的原因。
我build议将其存储在实例中,而不是其state
。 每当state
被更新时(只能通过setState
来完成),React调用render
,并对真实的DOM进行必要的修改。
因为timeout
的值对组件的渲染没有影响,所以它不应该处于state
。 把它放在那里会导致不必要的调用render
。
除了@ssorallen所说的之外,还应该记住在handleLeave被调用之前处理组件的卸载。
React.createClass({ handleEnter: function () { // Open a new one after a delay this._timeout = setTimeout(function () { this.openWidget(); }.bind(this), DELAY); }, handleLeave: function () { // Clear the timeout for opening the widget clearTimeout(this._timeout); }, componentWillUnmount: function(){ // Clear the timeout when the component unmounts clearTimeout(this._timeout); }, ... });
- debugging通过jQuery getScript函数添加的脚本
- DateTime到JavaScriptdate
- 如何获得JavaScript / jQuery Intellisense在Visual Studio 2008中工作?
- 获取canvas中两点之间的距离
- variables===未定义与typeofvariables===“undefined”
- iScroll 4不支持表单<select>元素iPhone Safari和Android浏览器
- 如何隐藏JavaScript的select? (跨浏览器)
- 如何实现一个引导模式的加载指标,等待AJAX从服务器获取数据?
- 你如何得到一个string的长度?