javascript - 如何避免在使用 es6 的反应中使用绑定?
问题描述
我正在使用 window.onerror 将 javascript 错误记录到文件中,如下面的代码所示,
class ErrorComponent extends react.purecomponent {
constructor(props) {
super(props);
this.handle_error = this.handle_error.bind(this);
}
componentDidMount = () => {
window.onerror = this.handle_error;
}
handle_error = (message, source, lineno, colno, error) => {
const payload = {
'message': message,
'source': source,
};
return false;
}
render = () => {
return null;
}
}
所以从上面的代码可以看出我使用了绑定。如果我不绑定 handle_error 并在 componentdidmount 中调用如下
componentDidMount () {
window.onerror = this.handle_error();
}
当我在 handle_error 中记录消息和源值时,我将它们视为未定义。
我该如何解决它...我不想使用 bind 以及如何在没有绑定 handle_error 方法的情况下解决这个问题。有人可以帮我解决这个问题。谢谢。
解决方案
使用粗箭头函数
胖箭头函数还应该将this
上下文传递给handle_error
函数。
class ErrorComponent extends react.purecomponent {
componentDidMount = () => {
window.onerror = (message, source, lineno, colno, error) => this.handle_error(message, source, lineno, colno, error);
}
handle_error = (message, source, lineno, colno, error) => {
const payload = {
'message': message,
'source': source,
};
return false;
}
render = () => {
return null;
}
}
推荐阅读
- ruby - Ruby on Rails 中的小数问题
- microsoft-graph-api - 使用 MSGraph 发布或修补 EducationClass 时出错
- linux-kernel - linux中的中断调度和处理
- javascript - vuex 动作返回的承诺在 firefox 中没有 finally() 方法
- regex - 在 Promtheus 中重新标记未按预期工作
- python - Python:我可以使用 __getitem__ 代替 __next__ 和 __iter__
- node.js - 有没有一种可能的方法来解析这个地址
- javascript - kendo ui Grid 虚拟滚动 - 滚动在哪里?
- jquery - 媒体查询在不同尺寸的屏幕上效果不佳
- ios - 修复得到我的愿望?