React中this丢失的四种解决方法


Posted in Javascript onMarch 12, 2019

发现问题

我们在给一个dom元素绑定方法的时候,例如:

<input type="text" ref="myinput" accept = "image/*" onChange = {this.selectFile} />

React组件中不能获取refs的值,页面报错提示:Uncaught TypeError: Cannot read property 'refs' of null or undefind

小栗子

import React from 'react';
import $ from 'jquery'
import '../app.scss';

export default class MyForm extends React.Component {
 submitHandler (event) {
  event.preventDefault();
  console.log(this.refs.helloTo);
  var helloTo = this.refs.helloTo.value;
  alert(helloTo);
 }
 render () {
  return (
   <form onSubmit={this.submitHandler}>
     <input ref='helloTo' type='text' defaultValue='Hello World! ' />
     <button type='submit'>Speak</button>
    </form>
  )
 }
}

React中的bind同上方原理一致,在JSX中传递的事件不是一个字符串,而是一个函数(如:onClick={this.handleClick}),此时onClick即是中间变量,所以处理函数中的this指向会丢失。解决这个问题就是给调用函数时bind(this),从而使得无论事件处理函数如何传递,this指向都是当前实例化对象。

解决

解决方案有4种

1、在ES6中可以在构造函数中,直接将当前组件(或者叫类)的实例与函数绑定。

2、在方法调用的时候绑定this

如: <input type="file" ref="myinput" accept = "image/*" onChange = {this.selectFile.bind(this)} />

3、在方法编写结尾的时候绑定this,bind(this)

如:

submitHandler(){
 console.log(1)
}.bind(this)

4、使用es6 箭头函数 myfn = () =>{ console.log(this.refs.can) }

推荐使用箭头函数,因为最近刚换到react 来,没怎么看就直接cli 来怼,遇到一些小问题记录于此

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
Apr 12 Javascript
国外的为初学者写的JavaScript教程
Jun 09 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
Mar 18 Javascript
js截取字符串的两种方法及区别详解
Nov 05 Javascript
js实现商城星星评分的效果
Dec 29 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
Dec 20 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
Jan 06 Javascript
JAVA中截取字符串substring用法详解
Apr 14 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
Aug 16 Javascript
纯js实现隔行变色效果
Nov 29 Javascript
JS实现获取进今年第几天是周几的方法分析
Jun 27 Javascript
在vue中使用Echarts利用watch做动态数据渲染操作
Jul 20 Javascript
使用koa2创建web项目的方法步骤
Mar 12 #Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 #Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 #Javascript
通过JS运行机制的角度说说作用域
Mar 12 #Javascript
Jquery的autocomplete插件用法及参数讲解
Mar 12 #jQuery
如何使用pm2快速将项目部署到远程服务器
Mar 12 #Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 #Javascript
You might like
PHP正则表达式之捕获组与非捕获组
2015/11/06 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
2016/05/23 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
js DOM模型操作
2009/12/28 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
关于jquery中attr()和prop()方法的区别
2018/05/28 jQuery
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
python自带的http模块详解
2016/11/06 Python
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
基于DataFrame筛选数据与loc的用法详解
2018/05/18 Python
移动端适配 使px自动转换rem
2019/08/26 HTML / CSS
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
师范生的个人求职信范文
2014/01/04 职场文书
中年人生感言
2014/02/04 职场文书
药品采购员岗位职责
2014/02/08 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
个人授权委托书范本
2014/09/14 职场文书
代理人委托书
2014/09/16 职场文书
公司授权委托书范本
2014/09/18 职场文书
鲁迅故里导游词
2015/02/05 职场文书
2015年化验室工作总结
2015/04/23 职场文书
学校少先队工作总结
2015/08/12 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python