为什么我们需要在React Native中绑定函数?

时间:2018-06-06 17:14:26

标签: javascript reactjs react-native

我正在研究React Native项目。在一些教程中我看到绑定一个这样的方法:

constructor(props){
super(props);
this.my_function = this.my_function.bind(this);
}

我的问题是,如果我可以使用this.my_function在构造函数中访问该函数,那么为什么我需要再次绑定它?我有Java和Python背景,可能就是为什么我对这种类型的方法绑定感到困惑。 注意:我知道如果我不在React Native / React JS中绑定方法,我的方法就无法正常工作。我只是想知道为什么我需要这个额外的绑定。

4 个答案:

答案 0 :(得分:4)

看一下这个链接,了解JS闭包的工作原理

http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and-this/

您需要绑定函数,以便它可以访问类中的状态和其他变量,而不仅仅是执行时传递的参数。

答案 1 :(得分:1)

你需要将this绑定到类的方法。这样您就可以在方法体中访问obj的副本。

如果像这样调用特殊参数this,它将自动在方法体中可用。

obj.my_function();

在这种情况下,obj被传递给this参数,您可以使用obj.propertyName访问它的所有方法和属性。

但是在你的情况下,你的类方法my_function很可能会因某事件的事件被调用。您需要使用此示例绑定类的实例。

希望它有所帮助。

我强烈建议您仔细阅读resource以便更好地理解。在前面的答案中也提到过。

答案 2 :(得分:1)

恕我直言,所有关于javascript中的范围和上下文。深入理解javascript中的作用域如何使您能够构建更强大的应用程序和更清晰的代码。

基本上,bind允许您将函数粘贴到给定的上下文中。它允许您访问存储在特定Scope中的值,通常在ReactJs构造函数范围内。

你也可以阅读,这是一篇很好的文章传递审查绑定方法。

http://reactkungfu.com/2015/07/why-and-how-to-bind-methods-in-your-react-component-classes/

另见本讨论,也许对您有用:

https://stackoverflow.com/a/38334183/9638302

答案 3 :(得分:0)

你将在反应中使用es6类,因此类将拥有自己的方法和变量。所有这些方法都可以在this中使用,并且如果一个方法想要访问另一个无法访问this的类方法来访问this,我们需要bind(this)那个方法。

如果你很懒,那么你可以使用自动绑定this的箭头功能。

class helloWorld extends Component {
     foo = () => {
        console.log(this);
     }
}