React 中的哪种绑定上下文方法(ES6 类)更好
Which method of binding context in React (ES6 classes) is better
在 React ES6 类中没有自动绑定。因此,开发人员有两种选择来绑定上下文:
1) 在构造函数中
export class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myFunction = this.myFunction.bind(this);
}
myFunction() {
// do something
}
render() {
return (
<div onClick={this.myFunction}></div>
);
}
}
2) 内联法
export class MyComponent extends React.Component {
constructor(props) {
super(props);
}
myFunction() {
// do something
}
render() {
return (
<div onClick={this.myFunction.bind(this)}></div>
);
}
}
哪种方法更有效率?
我推荐箭头函数。
export class MyComponent extends React.Component {
constructor(props) {
super(props);
}
myFunction = (e) => {
// e.preventDefault()
// do something
}
render() {
return (
<div onClick={e => this.myFunction(e)}></div>
);
}
}
不再需要bind()
。
对于处理程序函数,当它们作为普通函数调用时,这是指全局对象。当使用 ECMAScript 6 类而不是 React.createClass()
时,就会发生这种情况,后者在引擎盖下具有自动绑定功能。两种方法可以按预期实现绑定的效果。第一种方法,使用如下语法显式绑定处理程序函数。
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange() {}
另一种方法是以这种方式编写组件的处理程序属性,而不绑定任何内容。
<MyComponent onChange={() => this.handleChange()}><MyComponent />
这样,处理程序只会在触发相应的事件时被调用,此时,this
引用组件实例,这是我们期望它引用的。
这两种方法都可以工作,决定使用哪种方法是您的决定。
相关文章:
- 有没有更好的动手、具体的方法来学习Javascript
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- 在JavaScript中拆分日期字符串的更好方法是什么
- 为什么$.brower被弃用?还有什么更好的替代方案
- 设置嵌套对象属性的更好方法
- 您有更好的动态方式来缩短复杂的代码jquery吗
- 用Javascript重新格式化复杂文本日期字符串的更好方法
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 如何创建更好的方式来维护基于我的代码访问的最后一个页面
- 什么'这是从第三个函数上的async 1st函数获得结果的更好方法
- 什么更好?使用iframe或jQuery之类的东西在外部网站中加载HTML文件
- 将数组从javascript格式化为php的更好方法,反之亦然
- jquery:将动画绑定到滚动条位置的更好方法
- 有更好的方法吗?(递归解析HTML unicode实体)
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 有什么比document.execCommand更好的东西吗
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 编写if-else语句的更好方法
- React 中的哪种绑定上下文方法(ES6 类)更好
- 使用Callback加载数据.有没有更好的解决方案使用ES6 Promises ?