2016-12-26 4 views
0

にアクションを呼び出す:Mobxが、これはコードで計算さプロパティ

@computed 
    get user() { 
     if(!this.hasValidated) 
      this.reloadUserData(); 
     return this.userData; 
    } 
@action 
    reloadUserData() { 
    return new Promise(function(ok, err) { 
     if(!window.localStorage['atoken']) 
      err({id:24, detail:'User havn\'t logged in.'}); 
     if(!window.localStorage['aprofile']) 
      apicall.get('user/detail').then((data)=>{ 
       this.setProfile(data.data.content); 
       ok(true); 
      }).catch((derr)=>{ 
       err({id:20, detail:derr}); 
      }); 
     else{ 
      this.userData=JSON.parse(window.localStorage['aprofile']); 
     } 
    }.bind(this)); 
} 

ので、主な目標はしばらく、プロファイルデータがまだ検証されていない場合は、我々はその後、サーバーからそれを再フェッチします、ですデータが変更されるのを待って、ローカルストレージからキャッシュされた値を与えます。

Anddd ....私の質問は、なぜ私は '計算値はアクションfuntion'を呼び出すことができますか?

ありがとうございます! :D

答えて

1

計算は(概念的に)純粋であることを意図しています。アクションは(概念的に)不純であることを意図しています。したがって、技術的にはとなる可能性がありますが、概念的にはそうではありません。

恐らく、mobx-utils or computed-async-mobx`パッケージをチェックしないでください。それらは、あなたが探している抽象概念をすぐに使用することができます。

+0

私は[lazyObservable](https://github.com/mobxjs/mobx-utils#lazyobservable)が最適だと思います。しかし、それが他の観測可能なものを変更すると、他のコンポーネントの更新がトリガーされますか? – Chris

関連する問題