Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的组件的render()方法是唯一具有正确值';这';默认情况下?_Javascript_Reactjs_This - Fatal编程技术网

Javascript 为什么我的组件的render()方法是唯一具有正确值';这';默认情况下?

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); }

我只是想知道为什么render()在默认情况下将“this”设置为“correct”或直观值,但是我在组件上定义的任何其他方法都必须显式设置“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