传递反应导航goBack作为参考

问题描述:

所以,当我尝试传递goBack函数作为参考它不起作用,我需要封装它作为一个匿名函数来工作。有这个原因吗?传递反应导航goBack作为参考

我想这个工作! (如下图)

<Button onPress={this.props.navigation.goBack} /> 

但是,只有这工作(下)

<Button onPress={() => this.props.navigation.goBack()} /> 

this失去其参考?谢谢!

编辑:我注意到,该文件也使用匿名函数来调用goBack。好奇这是为什么。

+0

胖箭头保留'this'上下文。 – aromero

之所以<Button onPress={this.props.navigation.goBack} />不工作是goBack期望nullundefined作为第一个参数具有只返回一个屏幕的默认行为。

当您使用像这样的处理程序onPress={this.props.navigation.goBack}时,处理程序将调用goBack处理程序传回的事件,即this.props.navigation.goBack(event)

event不为空,因此goBack函数会尝试将其作为屏幕的关键字传递给goBackhttps://reactnavigation.org/docs/navigators/navigation-prop#goBack-Close-the-active-screen-and-move-back。然后,event与您的任何预定义密钥不匹配,因此路由不起作用。

+0

哇!感谢您的澄清! –

+0

没问题。乐意效劳! – hyb175

+0

不幸的是,他们没有在文档中提到'goBack'正在期待'undefined' –

是的,那是你最可能的问题。

尝试:<Button onPress={this.props.navigation.goBack.bind(this)} />

提到这一点在文档的总体方法/清洁代码:

https://facebook.github.io/react/docs/handling-events.html

+0

我认为'goBack'本身就是一个箭头函数,因此不能被反弹到一个新的'this'。 – Kraylog

+0

是的,我也这么认为^。你可以创建一个引用一个匿名函数的变量,并且可以将该函数作为'this.foo'来传递,并且它被正确调用。 –