2017-03-25 8 views
1

小さなtodoアプリに問題があります。私はエラーCannot read property 'todos' of undefined"this"は私のクラス内では定義されていません

thisaddTodoの内側にバインドされているのはなぜ

なくremoveTodoがある項目を削除しようとするたびに?

トリガがここで行われる:<button onClick={() => removeTodo(id)}> X </button>

デモのおかげ

JSfiddleに。

+0

関数宣言/表現VS [アロー機能が重複する可能性:あなたはまた、あなたが参照を失うことはありませんMobX配列replaceを使用する必要があり、彼らは、交換/同等か? ](http://stackoverflow.com/questions/34361379/arrowfunction-vs-function-declaration-expressions-are-they-equivalent-exch) – Andreas

答えて

0

removeTodoをプロパティ初期化矢印の機能にするか、action.boundデコレータを使用します。

removeTodo = (id) => { 
    var filtered = this.todos.filter(todo => todo.id !== id); 
    this.todos.replace(filtered); 
} 

または::

@action.bound 
removeTodo(id) { 
    var filtered = this.todos.filter(todo => todo.id !== id); 
    this.todos.replace(filtered); 
} 
+1

ありがとうTholleそれは今働いています。私は単に '' @ action.bound() ''を自分の関数に追加して、すべてが期待どおりに機能しています。 –

+0

@jonathandion素晴らしい! – Tholle

関連する問題