Javascript 为什么我的组件的render()方法是唯一具有正确值';这';默认情况下?
我只是想知道为什么render()在默认情况下将“this”设置为“correct”或直观值,但是我在组件上定义的任何其他方法都必须显式设置“this” 例如:Javascript 为什么我的组件的render()方法是唯一具有正确值';这';默认情况下?,javascript,reactjs,this,Javascript,Reactjs,This,我只是想知道为什么render()在默认情况下将“this”设置为“correct”或直观值,但是我在组件上定义的任何其他方法都必须显式设置“this” 例如: class App extends React.Component { constructor (props) { super(props); } onFormSubmit (e) { e.preventDefault(); console.log(this); }
class App extends React.Component {
constructor (props) {
super(props);
}
onFormSubmit (e) {
e.preventDefault();
console.log(this);
}
render () {
console.log(this);
return (
<div>
<form onSubmit={this.onFormSubmit}>
<input type="search"/>
<button>Submit</button>
</form>
</div>
);
}
}
ReactDOM.render(
<App/>,
document.getElementById('app')
);
为什么呢?有没有办法使它在默认情况下,在这两种情况下,此
将引用应用程序
?或者我只需要继续写this.onFormSubmit=this.onFormSubmit.bind(this)在构造函数中的code>
也许默认情况下想要这种行为是没有意义的(我对编程非常陌生!),但如果是这样,请解释原因:)
祝你一切顺利
[编辑]还有。。。为什么当在onFormSubmit函数中引用时,此
返回null
?以防万一,您是否尝试过
?
它应该在构造函数内部不绑定的情况下工作
对于编辑:
您的this
返回空值,因为您只是调用组件应用程序中定义的方法.onFormSubmit()
(由您的第一个console.log行返回),没有任何上下文
我邀请您查看以下资源:
- 了解.bind/.call/.apply方法的基础知识
- React是一个很好的教程,在这段视频中,他解释了为什么您应该始终.bind()这个上下文来防止这些问题
因为其他函数用于转换数据。。这种转换是异步的,这个
的值取决于函数的调用方式。而不是它的定义。请看:Manu,感谢您提供这些链接。关于bind()、call()和apply()方法的那篇文章特别有帮助,该网站上还有一篇关于this
的文章也很有帮助。我想我学到的是,this
指的是调用函数的对象,在该函数中引用了this
。没错,因为当您调用objectA中定义的方法时,使用不同上下文(从objectB)处理它的唯一方法是绑定或调用objectB的this
上下文!像var a={name:“Manu”,showName:()=>{return this.name}
///var b={name:“user3624937”}
//a.showName.bind(b)
将返回“user3624937”,这是我的荣幸:)
App {props: Object, context: Object...}
null