视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详解react关于事件绑定this的四种方式_javascript技巧
2020-11-27 20:01:22 责编:小采
文档


在react组件中,每个方法的上下文都会指向该组件的实例,即自动绑定this为当前组件,而且react还会对这种引用进行缓存,以达到cpu和内存的最大化。在使用了es6 class或者纯函数时,这种自动绑定就不复存在了,我们需要手动实现this的绑定。

React事件绑定类似于DOM事件绑定,区别如下:

1.React事件的用驼峰法命名,DOM事件事件命名是小写

2.通过jsx,传递一个函数作为event handler,而不是一个字符串。

3.React事件不能通过返回false来阻止默认事件,需要显式调用preventDefault()

如下实例:

<a href="#" onclick="console.log('The link was clicked.'); return false">
Click me
</a>
class ActionLink extends React.Component {
constructor(props) {
super(props);
}
handleClick(e) {
e.preventDefault();
console.log('The link was clicked.');
}
render() {
return (
<a href="#" onClick={this.handleClick.bind(this)}>Click Me...</a>
);
}
}

ps:React组件类的方法没有默认绑定this到组件实例,需要手动绑定。

以下是几种绑定的方法:

bind方法

直接绑定是bind(this)来绑定,但是这样带来的问题是每一次渲染是都会重新绑定一次bind;

class Home extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 };
 }
 del(){
 console.log('del')
 }
 render() {
 return (
 <p className="home">
 <span onClick={this.del.bind(this)}></span>
 </p>
 );
 }
}

构造函数内绑定

在构造函数 constructor 内绑定this,好处是仅需要绑定一次,避免每次渲染时都要重新绑定,函数在别处复用时也无需再次绑定

class Home extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 };
 this.del=this.del.bind(this)
 }
 del(){
 console.log('del')
 }
 render() {
 return (
 <p className="home">
 <span onClick={this.del}></span>
 </p>
 );
 }
}

::不能传参

如果不传参数使用双冒号也是可以

class Home extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 };
 }
 del(){
 console.log('del')
 }
 render() {
 return (
 <p className="home">
 <span onClick={::this.del}></span>
 </p>
 );
 }
}

箭头函数绑定

箭头函数不仅是函数的'语法糖',它还自动绑定了定义此函数作用域的this,因为我们不需要再对它们进行bind方法:

class Home extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 };
 }
 del=()=>{
 console.log('del')
 }
 render() {
 return (
 <p className="home">
 <span onClick={this.del}></span>
 </p>
 );
 }
}

相关推荐:

php的this和self简单介绍

四种JS中this取值模式

html的标签中的this应该如何使用

下载本文
显示全文
专题