2016-08-31 2 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

onClick() 그래서 지금 그 때마다 셀 변경을 실행하는 것입니다 실행이 있어요. 또한 셀을 변경하기 때문에 끊임없이 스스로를 호출 할 것입니다. 시작하는 셀이 변경 될 때 bumpRandom을 호출하고 결과 변경 사항이 아닌 경우에만 반응 논리에 논리를 추가해야합니다. –

답변

1

this MobX issue에서 이야기 한 후 반응을 사용하지 않음으로써 해결책을 발견했습니다. 내가 대신 @action를 사용하고

class OtelloBoard { 
    @observable cells = []; 

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

@action bumpRandom() { 
    this.cells[45].bump() 
} 
} 
관련 문제