react里面的this_深入解读 React 组件中的 "this"

其实很早就发过这篇文章,可能是因为是我当时是用英文写的,没人看,所以这次给大家翻译了。希望这篇文章能让你有所收获。

动机

如果你熟悉 React.js, 你一定知道知道,如果你像下面这样写事件监听函数,浏览器一定会给你报语法错误

// JSX

class Test extends React.Component {

handleClick () {

this.setState({});

}

render () {

return

}

}

此时如果你点击 button 按钮,浏览器就会告诉你 Cannot read property 'setState' of undefined

我们知道你可以通过 bind 方法或者箭头函数来强制绑定 this 来避免这个问题。我们在下面的章节中会提到箭头函数。

或者

handleClick = () => {

this.setState({});

}

聪明的你应该了解,如果 this 没有绑定到当前对象,那么浏览器就会报错。而且你也知道如何来绑定 this 。但是你考虑过下面几个问题吗?此时 this 到底指向了谁?是 undefined 还是全局对象,比如 window?(根据前面提到的浏览器报错信息,答案显然是 undefined)

为什么 React 组件的实例会失去指向它本身的 this 指向?

这是 JavaScript 语言本身导致的还是 React 的内部某些原因导致的呢?

自我探索

在进行自我探索之前,让我们看一下官方文档是怎么说的:这并不是 React 自身的行为;这是因为函数在 JS 中就是这么工作的。通常情况下,如果你不通过在方法后面加 () 比如 onClick={this.handleClick} ,你应该 bind 这个方法。

因此,上一节的最后一个问题解决了。this 的行为和 React 无关,这是一个 JS 语言本身的特性。

现在,我们来看一下下面两段代码,然后思考一下输出结果是什么。如果你不确定输出结果是什么,你可以在 Node.js 或者 Chrome 浏览器中跑一下试一试。

代码一:

// 使用 ES6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值