2016-08-31 5 views
0

私はMobXを使ってOtelloゲームを作成しようとしています。だから私はタイルの変更を探して、それに応じて他のタイルを更新するという反応があります。mobx反応が不安定で、周期的な関数

したがって、次のコードでは、bumpRandom()を実行して、別のタイルを変更してその効果を確認しました。しかし、これは巡回関数の原因になるreactionがいつも実行されています。 reactionで観測を停止するにはどうすればよいですか?

class OtelloBoard { 
    @observable cells = []; 

    constructor() { 
    for (i = 0; i< SIZE*SIZE; i++) { 
     this.cells.push(new Cell()) 
    } 
    reaction(
    () => this.cells.map(cell => cell.status), 
     status => { 
     this.bumpRandom() 
     console.log('Status has changed' + status) 
     } 
    ) 
    } 

    @action bumpRandom() { 
    this.cells[45].bump() 
    } 
} 

私はuntracked(() => this.bumpRandom())を試しましたが、どちらも動作しません。

+0

を実行しているのはだから、今それが毎回セル変更を実行しようとしています。それはまた細胞を変えるので、それは無限に自分自身を呼ぶことになるでしょう。開始セルが変更されたときにbumpRandomを呼び出すだけで、結果の変更は行わないように、反応にロジックを追加する必要があります。 –

答えて

1

this MobX issueで話した後、私は反応を使わないことで解決策を見つけました。私の代わりに@actionを使用していて、それがonClick()

class OtelloBoard { 
    @observable cells = []; 

    constructor() { 
    for (i = 0; i< SIZE*SIZE; i++) { 
    this.cells.push(new Cell()) 
} 
} 

@action bumpRandom() { 
    this.cells[45].bump() 
} 
} 
関連する問題