2017-02-19 74 views
0
onTypeSelect (str) { 
     this.setState({taskType: str}) 
    } 

<TouchableOpacity onPress={this.onTypeSelect('type1').bind(this)}> 
</TouchableOpacity> 

未定義不是對象(正在評估'_this3.onTypeSelect('type1).bind')。我在調用帶參數的函數時出錯了

任何人都可以幫助我嗎?我是反應原生的初學者。

回答

3

試試這個

onTypeSelect (str) { 
    this.setState({taskType: str}) 
} 

<TouchableOpacity onPress={() => { this.onTypeSelect('type1'); }} /> 

當你.bind(本),你需要傳遞一個函數,而不是函數的返回值,在這種情況下,undefined。這種方式起作用,因爲該功能是從組件範圍內調用的,因此使this成爲有效的參考。

另一種方式來解決這個問題是通過使用綁定是這樣的:

this.onTypeSelect.bind(this, 'type1') 

編輯:感謝您的意見和對方回覆,我增加了完成信息的緣故信息。 Alexander T.Bartek F.

+0

它的工作原理!謝謝。 – mojizo

+2

您的代碼有效,但解釋不正確。 *當你.bind(this)時,範圍是當前的HTMLDOMElement,* - 這不是真的。 'this'指向綁定時的組件。問題是應該在函數本身使用'bind',而不是函數返回的結果。有關詳細說明,請參閱@Alexander .answer –

2

基於.bind文檔,你必須傳遞參數給.bind像這樣

this.onTypeSelect.bind(this, 'type1') 

fun.bind(thisArg[, arg1[, arg2[, ...]]])

在你的榜樣,你調用方法

this.onTypeSelect('type1') 

該方法返回結果(在這種情況下結果undefined),和你想申請.bind結果undefined

undefined.bind(this) 

然而.bind只存在於Function對象,這是你爲什麼得到錯誤。

+1

感謝您的幫助,我將很快閱讀文檔。 – mojizo