2016-08-31 4 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() 
} 
} 
Смежные вопросы