2017-02-19 4 views

答えて

3

あなたは(これを).bindすると、この

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

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

を試してみて、あなたは、この場合には、undefinedを機能していない関数の戻り値を渡す必要があります。この方法は、関数がコンポーネントスコープの内部から呼び出され、thisを有効な参照にするために機能します。

問題を解決する別の方法は、バインドをこの方法を使用することです:

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

EDIT:コメントや他の回答のおかげで、私は完了と情報のための情報を追加しました。 Alexander T.Bartek F.

+0

これは機能します。ありがとうございました。 – mojizo

+2

コードは動作しますが、説明が正しくありません。 * .bind(this)の場合、スコープは現在のHTMLDOMElementです。* - それは真実ではありません。 'this'はバインディング中のコンポーネントを指します。問題は、関数によって返された結果ではなく、関数自体に 'bind'を使うべきだということでした。詳細については、@Alexander .answerをご覧ください。 –

2

.bindドキュメントに基づいて、あなたの例ではそう

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

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

よう.bindに引数を渡す必要があり、あなたが方法

this.onTypeSelect('type1') 
を呼び出します

方法は、(この場合は結果undefinedになります)結果を返し、あなたが.bindに結果を適用しようとしている(undefined

undefined.bind(this) 

しかし.bindは、それはだ、だけFunctionオブジェクト内に存在しますなぜあなたはエラーを取得します。

+1

ご協力ありがとうございます。私はすぐに文書を読む予定です。 – mojizo

関連する問題