Javascript ReactJS删除ES6中的绑定事件处理程序
我试图解除ES6 react组件中事件侦听器的绑定。我不确定这是不是最好的方法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
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中实现它。。。扩展反应组件