javascript - 关于react中es5和es6写法中的this
高洛峰
高洛峰 2017-04-11 11:33:03
[JavaScript讨论组]

es5的代码:

  var React = require('react');
    var MyComponent = React.createClass({
        handleClick: function() {
            React.findDOMNode(this.refs.myTextInput).focus();
        },
        render: function() {
            return (
                

); } }); module.exports = React.createClass({ render: function() { return (

); } });

es6的代码:

import React,{Component} from 'react';
class FocusText extends Component{
  handleClick(){
    React.findDOMNode(this.refs.myText).focus();
  }
  render(){
    return(
      

); } } class RepeatArray extends Component{ constructor() { super(); } render(){ return (

); } } export default RepeatArray;

我的问题是:为什么es5写法中的onclick事件的处理函数不需要绑定this,但是es6写法中的onclick事件处理函数需要绑定this?es6写法中绑定前的this指向是什么?

其实经常看到react中使用的es6需要绑定this,有时候在constructor中绑定再用,其实为什么需要这样的?在constructor中绑定和像上面es6例子中那样绑定有什么差别?为什么es5写法中却不需要绑定呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(1)
阿神

因为用ES5的createClass的写法,React会对里面的方法进行this绑定。

而用ES6的extends Component并不会进行this绑定。

解决方法:

  1. 按照你说的,每个方法都进行this.handleClick.bind(this)

  2. 方法定义的时候,用箭头函数定义,ES6会给这个方法自动绑定this

  3. 这么调用也可以: onClick={(e)=>{ this.handleClick(e) }}

上面三种方法都可以在handleClick中获取正确的this

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号