目录

一、简介

二、 方法

三、总结


一、简介

React中定义一个组件,可以通过ES6版本以前的React.createClass或者ES6的class xxx extends React.Component。如果使用ES6并且react版本在16以上,推荐采用class的方式,代码结构更加清晰,可读性强,而且React官方也推荐使用这种方式定义组件。

绑定this是react中非常重要的一部分。React中,绑定this的方式有多种,下面一一看看怎么进行this绑定。

二、 方法

a.【第一种方式】使用ES5方式创建组件绑定this的方法

如果你使用的是React 15及以下的版本,你可能使用过React.createClass函数来创建一个组件。你在里面创建的所有函数的this将会自动绑定到组件上。

/*** @Description: 第一种方法: 使用ES5方式创建组件绑定this的方法* @author weishihuai* @date 2019/5/15 9:59** 说明: React.createClass is deprecated since React 15.5.0, use the npm module create-react-class instead (react/no-deprecated)* 注意随着React 16版本的发布官方已经将改方法从React中移除**/
const MyApp1 = React.createClass({handleClickListener() {console.log('this > ', this); // this 指向App组件本身},render() {return (<div onClick={this.handleClickListener}>使用ES5方式创建组件绑定this的方法</div>);}});export default MyApp1;

b.【第二种方式】render方法调用的时候使用.bind(this)进行绑定

import React from 'react';/*** @Description: 第二种方法: render方法调用的时候使用.bind(this)进行绑定* @author weishihuai* @date 2019/5/15 9:59** 说明: 由于组件每次执行render会重新分配事件函数,将会影响性能*/
export default class MyApp2 extends React.Component {handleClickListener() {console.log('this->', this);}render() {return (<div onClick={this.handleClickListener.bind(this)}>render方法调用的时候使用.bind(this)进行绑定</div>);}}

缺点:由于组件每次执行render会重新分配事件函数,将会影响性能

c.【第三种方式】render方法调用的时候使用箭头函数进行绑定

/*** @Description: 第三种方法: render方法调用的时候使用箭头函数进行绑定* @author weishihuai* @date 2019/5/15 9:59** 说明: 由于组件每次执行render会重新分配事件函数,将会影响性能*/
export default class MyApp3 extends React.Component {handleClickListener() {console.log('this->', this);}render() {return (<div onClick={e => this.handleClickListener(e)}>render方法调用的时候使用箭头函数进行绑定</div>);}}

这种方式使用了ES6的上下文绑定来让this指向当前组件,同第二种方式,由于组件每次执行render会重新分配事件函数,将会影响性能。

d.【第四种方式】在构造函数中进行显式绑定this.xxx.bind(this)

为了避免在render中绑定this引发可能的性能问题,我们可以在constructor中预先进行绑定。

import React from 'react';/*** @Description: 第四种方法: 在构造函数中进行显式绑定this.xxx.bind(this)* @author weishihuai* @date 2019/5/15 9:59** 说明: 如果有多个函数需要写很多重复绑定代码*/
export default class MyApp4 extends React.Component {constructor(props) {super(props);this.handleClickListener = this.handleClickListener.bind(this);}handleClickListener() {console.log('this->', this);}render() {return (<div onClick={this.handleClickListener}>在构造函数中进行显式绑定 this.xxx = this.xxx.bind(this)</div>);}}

缺点:如果有多个函数需要写很多重复绑定代码,可读性和可维护性相对较差。

e.【第五种方式】在定义函数的时候使用箭头函数定义

import React from 'react';/*** @Description: 第五种方法: 在定义函数的时候使用箭头函数定义* @author weishihuai* @date 2019/5/15 9:59** 说明: 箭头函数会自动绑定到当前组件的作用域中* 如果使用ES6和React 16以上的版本,强烈推荐使用该方式进行绑定*/
export default class MyApp5 extends React.Component {handleClickListener = () => {console.log('this->', this);};render() {return (<div onClick={this.handleClickListener}>在定义函数的时候使用箭头函数定义</div>);}
}

优点:箭头函数会自动绑定到当前组件的作用域中,不会产生很多重复代码,推荐使用此种方式绑定this.

三、总结

以上就是关于在React中绑定this的5中方法介绍,为了后期代码的可读性以及可维护性,推荐大家都使用箭头函数定义函数的方式进行绑定,当然特殊需求,就需要根据具体需求选择合适的方式绑定。本文只是笔者的一些学习总结,希望能对大家的学习有所帮助。

【React】绑定this的5种方法总结相关推荐

  1. React绑定事件的四种方法

    今天给大家分享一下react绑定事件的四种方法,也许会有不准确的地方,欢迎指点出来,大家一起进步~ 首先要先了解,在js中class的方法默认不会绑定this,默认情况下是undefined,所以就需 ...

  2. React绑定this的三种方式

    转载自  React绑定this的三种方式 React可以使用React.createClass.ES6 classes.纯函数3种方式构建组件.使用React.createClass会自动绑定每个方 ...

  3. 数据绑定(三)为Binding指定绑定源的几种方法

    原文:数据绑定(三)为Binding指定绑定源的几种方法 Binding的源是数据的来源,所以,只要一个对象包含数据并能通过属性把数据暴露出来,它就能当作Binding的源来使用,常用的办法有: 一. ...

  4. React.js绑定this的5种方法

    this在javascript中已经相当灵活,把它放到React中给我们的选择就更加困惑了.下面一起来看看React this的5种绑定方法. 1.使用React.createClass 如果你使用的 ...

  5. plupload上传插件绑定事件的两种方法

    在经受一天的磨难之后终于找到处理事件方法: 先引用: <script src="js/plupload.full.min.js" type="text/javasc ...

  6. javascript中为某个对象(控件)绑定事件的几种方法

    今天学习了javascirpt的一些基础知识,有关事件绑定的一些方法: 1.<input type="button" οnclick="clickHandler() ...

  7. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  8. js 绑定事件的几种方法 addEventListener()

    看代码 <!DOCTYPE html> <html><head><meta charset="UTF-8"><title> ...

  9. 【js】绑定事件的两种方法

    方法一: 为需要绑定事件的标签添加一个属性onclick 代码实现: <input type="button" value="测试按钮" onclick= ...

  10. react二级路由的两种方法

    ** react 二级路由配置 ** 1.使用react - router - config包 ①创建一个config.js文件默认导出路由数组 import Home from '../views/ ...

最新文章

  1. Symfony学习笔记
  2. 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
  3. Java多线程之一:进程与线程
  4. leetcode 101. 对称二叉树 递归解法
  5. 友源社区APP论坛源码+网站源码
  6. 嵌入式操作系统内核原理和开发(改进的链表内存分配算法)
  7. 什么是单反相机?什么叫数码相机?
  8. POJ 3518 Prime Gap(素数)
  9. vrep和simulink联合仿真
  10. 模糊综合评价法的R语言实现
  11. css模糊文字,CSS3模糊文字
  12. 基于STM32F429,Cubemx的SAI音频播放实验
  13. 项目使用mybatis-plus采用mysql/clickhouse多数据库配置,报错Invalid bound statement (not found)
  14. NVIDIA助力风暴英雄黄金世俱杯Ballistix强势夺冠
  15. 华3C交换机调试基本
  16. 【计网】(一) 集线器、网桥、交换机、路由器等概念
  17. cache stm32h7_STM32H7的Cache和MPU
  18. 如何在家里制作服务器,在家如何架设服务器?
  19. 最完整的Windows系统安装教程(Win7、Win10、Win11)
  20. EasyConnect 安装使用教程 Windows

热门文章

  1. 翻译:PropertyWrapper swift 5 aop特性
  2. python appium 并行多设备_appium 多个设备同时执行
  3. python 京东 价格_python根据京东商品url获取产品价格
  4. 凸优化-Proximal GD
  5. MATLAB 数据显示格式
  6. 【bug:鳄梨】【上线前修改其他bug急着提交造成的bug】
  7. Raki的读paper小记:LAMOL: LANGUAGE MODELING FOR LIFELONG LANGUAGE LEARNING
  8. Raki的读paper小记:SpanBERT: Improving Pre-training by Representing and Predicting Spans
  9. c语言文件名错误的是,C语言程序错误,不能正常读写文件,求解啊
  10. Android 开发 Camera2开发_3_处理预览和拍照偏暗问题