方法中的this问题

来源:3-2 React 中的响应式设计思想和事件绑定

自驱动

2020-05-05

  • Q1 为啥会console两遍?
 render(){
	return (
		<input type="text"  onChange={console.log(this)}/>  
	)
}

图片描述

  • Q2 由Q1知,当input监听到值改变时,onChange调用者是TodoList,为啥inputChange()里面的this是undefined.
inputChange(){
	console.log(this) // this=> undefined
}
 render(){
	return (
		<input type="text"  onChange={this.inputChange}/>  // this=> TodoList
	)
}
写回答

1回答

天河卢姥爷

2020-05-06

第一个问题我的理解是这样的,rander会在刚开始渲染的时候调用一次,第二次是不是你往输入框里面输入了美容,改变了它的Store的值,然后它才又渲染了第二次。

第二个问题的话,在class的构造函数里面的this都会指向实例对象,所以你往onChange里面的this打出来的都是实例对象TodoList,然后你往里面调用inputChange的时候,是把它当成是一个普通函数给调用进去了,而没有关联上下文,它不是class下面的原型函数。

然后class默认的情况下,是使用了严格模式,严格模式下普通函数的this是指向undefinded的(普通模式指向window),所以你最后它打印出来的是undefinded。

我是这样理解的,如何有错误的话,请指正。

2
0

React零基础入门到实战,完成企业级项目简书网站开发

主流新技术 React-redux,React-router4,贯穿基础语法

5275 学习 · 2496 问题

查看课程