2016-08-31 2 views
0

Ich versuche MobX zu verwenden, um ein Otello-Spiel zu erstellen. Also habe ich eine Reaktion, um nach Kacheln zu suchen und dann andere Kacheln entsprechend zu aktualisieren.Mobx Reaktion instabil, zyklische Funktion

Also im Code unten lief ich bumpRandom(), um eine andere Kachel zu ändern, um den Effekt zu sehen. Aber dann geht das in zyklische Funktion, weil reaction immer ausgeführt wird. Wie bekomme ich es in einer reaction aufhören zu beobachten?

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() 
    } 
} 

Ich versuchte untracked(() => this.bumpRandom()) aber das funktioniert auch nicht.

+0

So jetzt, dass jedesmal, wenn eine Zelle ändert laufen wird. Da es auch eine Zelle verändert, wird es sich endlos selbst nennen. Sie müssen in Ihrer Reaktion etwas Logik hinzufügen, um sicherzustellen, dass nur bumpRandom aufgerufen wird, wenn sich die initiierende Zelle ändert, und nicht die resultierenden Änderungen. –

Antwort

1

Nachdem ich in this MobX issue geredet habe, fand ich eine Lösung, indem ich die Reaktion nicht verwendete. Ich verwende @action statt und haben es laufen onClick()

class OtelloBoard { 
    @observable cells = []; 

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

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