2017-08-09 67 views
1

所以,當我嘗試傳遞goBack函數作爲參考它不起作用,我需要封裝它作爲一個匿名函數來工作。有這個原因嗎?傳遞反應導航goBack作爲參考

我想這個工作! (如下圖)

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

但是,只有這工作(下)

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

this失去其參考?謝謝!

編輯:我注意到,該文件也使用匿名函數來調用goBack。好奇這是爲什麼。

+0

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

回答

1

之所以<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' –

0

是的,那是你最可能的問題。

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

提到這一點在文檔的總體方法/清潔代碼:

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

+0

我認爲'goBack'本身就是一個箭頭函數,因此不能被反彈到一個新的'this'。 – Kraylog

+0

是的,我也這麼認爲^。你可以創建一個引用一個匿名函數的變量,並且可以將該函數作爲'this.foo'來傳遞,並且它被正確調用。 –