Javascript 反应JS和泄漏的输入

Javascript 反应JS和泄漏的输入,javascript,memory-leaks,reactjs,Javascript,Memory Leaks,Reactjs,我是使用v0.10.0的React JS新手,我正在尝试修复项目中的内存泄漏。下面是我正在做什么来呈现有问题的页面 var mainContent = React.createClass({ /*...various functions for handling state changes...*/ render: function() { return React.DOM.div({ children: [

我是使用v0.10.0的React JS新手,我正在尝试修复项目中的内存泄漏。下面是我正在做什么来呈现有问题的页面

var mainContent = React.createClass({
    /*...various functions for handling state changes...*/
    render: function() {
        return React.DOM.div({
            children: [
                /*...some children...*/
                React.DOM.input({
                    id: 'quizname-textbox',
                    type: 'text',
                    className: 'textfield text-entry-toggle-textbox',
                    value: this.state.value,
                    autoComplete:"off",
                    autoCorrect: "off", 
                    autoCapitalize: "off", 
                    placeholder: gettext('Name Your Quiz...'), 
                    maxLength: "255",
                    onBlur: this.handleBlur,
                    onChange: this.handleChange
                }),
                /*...more children...*/
            ]
        });
    }
});

React.renderComponent(mainContent, document.getElementById('main-content'));
…当我离开页面时,我会这样做:

React.unmountComponentAtNodedocument.getElementById'main-content'

对unmountComponentAtNode的调用返回true,表示组件已成功删除。但是,如果使用Chrome的开发工具拍摄堆快照,我会看到一个分离的DOM树,其中包含页面上的所有元素。上面的input元素是唯一的黄色元素,这意味着仍然有对它的JavaScript引用,因此它很可能导致整个页面泄漏。请参见屏幕截图。我不明白为什么仍然有对该输入的引用—我没有显式地向它添加任何其他事件侦听器,而且它在this.handleBlur或this.handleChange中都没有引用。此外,如果我只是注释子列表中的输入,问题就完全消失了,DOM树不再显示在分离的列表中

这可能是最奇怪的线索:堆快照说输入是名为elt的窗口对象的属性;但是,我没有给它起这个名字,当然也没有明确地将它直接添加到窗口对象中

你知道为什么这些信息仍然存在吗


你能从这个类中再发布一些吗?@Eelke这个类相当大,超过1500行代码。你有什么特别想看的吗?嗯。。。具体地说,泄漏的来源:是否有任何引用您是否有任何第三方库或任何浏览器扩展?@wiredparie感谢您的建议确实泄漏是由名为的浏览器扩展引起的。它是一个密码管理器,对输入元素执行一些动态操作,并显然将对它们的引用存储在全局对象上。一旦我关闭了分机,泄漏立即停止。下一步我会向他们报告一个bug。经验教训:如果要查找JavaScript/DOM内存泄漏,请禁用扩展!