2017-09-29 11 views
0

私はES5をターゲットとするtypescript 2クラスを持っています。私はそれを実行するとコンソールの件名にエラーが表示されます。 switch文は正常に動作しますが、increment()メソッドとdecrement()メソッドは実行されません。ES5 this.methodは関数ではありません

class MyClass extends React.Component{ 
    ... 
    increment() { 
    console.log('increment()') 
    ... 
    } 
    decrement() { 
    console.log('decrement()') 
    ... 
    } 

    buttonClick(btn) { 
    console.log(btn) 
    switch (btn) { 
     case "prev": 
      console.log('switch prev') 
      this.decrement(); 
      //this.decrement; 
      break; 
     default: 
      console.log('switch next') 
      this.increment(); 
      //this.increment; eliminates err but method still doesnt execute 
      break; 
    } 
    } 
} 
+1

これが反応すれば、buttonClickを呼び出すjsxテンプレートに '.bind(this)'を入れてみてください。例えば'onClick = {this.buttonClick.bind(this)}' – gautsch

+0

あなたはどこでどのように 'buttonClick'を呼び出すのかわかりませんでした。これは重要です – Bergi

+0

Thx @gautsch this.buttonClick.bind(これは)トリックでした。 – alexb

答えて

2

thisの値は、あなたが関数を呼び出すときにあなたが期待するものになるように、あなたの関数にthisをバインドしていることを確認してください:

class MyClass extends React.Component{ 
    constructor() { 
    super() 
    this.increment = this.increment.bind(this) 
    this.decrement = this.decrement.bind(this) 
    this.buttonClick = this.buttonClick.bind(this) 
    } 
    increment() { 
    console.log('increment()') 
    } 
    decrement() { 
    console.log('decrement()') 
    } 
    buttonClick(btn) { 
    // ... 
    } 
} 

希望する場合は、また、プロパティ初期化矢印の機能を使用することができます:

class MyClass extends React.Component{ 
    increment =() => { 
    console.log('increment()') 
    } 
    decrement =() => { 
    console.log('decrement()') 
    } 
    buttonClick = (btn) => { 
    // ... 
    } 
} 
+1

私は間違っているかもしれませんが、私は 'this.buttonClick 'は' decrement'や 'increment'ではなくbindする必要があります – bennygenel

関連する問題