十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
小编给大家分享一下react函数this相关问题的示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
成都创新互联主营攸县网站建设的网络公司,主营网站建设方案,成都APP应用开发,攸县h5微信小程序开发搭建,攸县网站营销推广欢迎攸县等地区企业咨询react 函数this相关
在使用react的过程中,常常因为函数的this问题导致执行结果不如预期。现梳理下这块的问题,先看代码:
import React from "react"; class MsgList extends React.PureComponent { render() { return (
示例代码实现了简单的元素添加和列表展示功能。
其中函数绑定和定义的方式如下:
// 绑定 onChange={this.handleInput} // 定义 handleInput = (val) => { this.setState({ inputMsg: val.target.value }) }
定义函数的方式有很多种,比如:
handleInput(val) { console.log(val.target) console.log(this) this.setState({ inputMsg: val.target.value }) }
此时val.target为元素,但是this为undefined,此时调用this.setState会报错。
类的方法默认是不会绑定this的,所以这里丢失了函数执行的上下文。那么如果在绑定时候加上一对括号:
// 函数定义 handleInput(val) { console.log(val.target) console.log(this) this.setState({ inputMsg: val.target.value }) }
此时添加括号,虽然绑定了上下文,但这样会导致函数在组件渲染的时候被触发,而不是等到渲染完成时通过点击触发,且无法响应onChange动作。组件在渲染过程中触发函数,函数中调用setState()会再次调用render,导致死循环。
如果在最开始使用.bind()
为函数绑定上下文,去掉绑定函数时的括号,
constructor(props) { super(props) this.state = { inputMsg: 'hello', list: [123] } this.handleInput = this.handleInput.bind(this) }
这时功能正常。
而最开始我们定义函数时用箭头函数绑定了上下文,所以也能实现想要的功能。
除此之外,还有一种书写方式也可以正常工作,不过实际上与最开始的写法是一样的。
this.handleInput(e)}/>
使用react的时候要注意this的指向,类默认是不会为方法绑定this,要么在开始的时候手动绑定this,要么可以使用箭头函数自动绑定上下文。如果不是希望在组件渲染时就触发的函数,那么绑定函数时不能加括号。
以上是“react函数this相关问题的示例”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。