次の記事では、mobx の反応を破棄する必要があると述べています: https://mobxjs.github.io/mobx/best/pitfalls.html
@computed デコレータでマークされたプロパティは一種の反応なので、それらも破棄する必要があるようです。問題は、disposer 関数を返す autorun()、observe() またはその他のリアクションの明示的な呼び出しとは異なり、@computed デコレータではそのリアクションを破棄できないように見えることです。
問題は、@computed デコレータによって定義されたリアクションをどのように破棄するかということです。
破棄しないという問題は、次の例で明らかになる可能性があります
export class Observed {
@observable
public x: number;
}
export class Observer {
constructor(private member: Observed){
}
@computed
get doubled(){
return this.member.x*2;
}
}
let member = new Observed();
let observer = new Observer(member);
// now pass observer as a model to some react component and use its doubled property
doubled() をラップするリアクションが破棄されない限り、「メンバー」が生きている限り、オブザーバーは生き続けます。Observer に dispose() 関数を追加して自分で呼び出しても、 doubled() の基になる反応にアクセスして破棄する方法がわかりません。