Javascript ReactJS删除ES6中的绑定事件处理程序

Javascript ReactJS删除ES6中的绑定事件处理程序,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我试图解除ES6 react组件中事件侦听器的绑定。我不确定这是不是最好的方法 export default class ProductDetail extends React.Component { ... componentDidMount() { this.boundKeyListener = this.keyListener.bind(this); document.addEventListener('keydown', this.boun

我试图解除ES6 react组件中事件侦听器的绑定。我不确定这是不是最好的方法

export default class ProductDetail extends React.Component {
    ...
    componentDidMount() {
        this.boundKeyListener = this.keyListener.bind(this);
        document.addEventListener('keydown', this.boundKeyListener);
    }

    componentWillUnmount(){
        document.removeEventListener('keydown', this.boundKeyListener);
    }
    ...
}
this.keylister
内部,我需要执行
this.setState({foo:'bar})
,我发现在类的作用域中运行侦听器的唯一方法是使用
fn.bind()

我的问题是,我真的需要将boundListener保存到属性吗?或者会

document.removeEventListener('keydown', this.keyListener.bind(this));
够了吗

或者会

document.removeEventListener('keydown', this.keyListener.bind(this));
够了吗

不,不会的
.bind
返回一个新的函数,因此您将尝试删除与添加的处理程序不同的处理程序

函数foo(){}
log(foo.bind(null)==foo.bind(null))
或者会

document.removeEventListener('keydown', this.keyListener.bind(this));
够了吗

不,不会的
.bind
返回一个新的函数,因此您将尝试删除与添加的处理程序不同的处理程序

函数foo(){}

log(foo.bind(null)==foo.bind(null))我将支持文档显示的内容:@MatthewHerbst Yeah with React.createClass绑定由您负责。我试着在ES6
中实现它。。。扩展React.Component
我将支持文档中显示的内容:@MatthewHerbst-Yeah with-React.createClass绑定由您负责。我试着在ES6
中实现它。。。扩展反应组件