2016-12-26 5 views
0

Dies ist der Code:Mobx aufrufen Aktion auf Berechnete Eigenschaft

@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)); 
} 

so, das Hauptziel ist es, wenn die Profildaten sind noch nicht bestätigt, werden wir es vom Server wieder beschaffen, dann, während Warten Sie die Daten geändert, geben wir ihnen den zwischengespeicherten Wert aus dem lokalen Speicher.

Anddd .... meine Frage ist, Warum gibt es mir eine "Berechneter Wert kann nicht Action funtion aufrufen" Ding?

Vielen Dank! : D

Antwort

1

Rechner sollen (konzeptionell) rein sein. Und Aktionen sollen (konzeptionell) unrein sein. Also, obwohl es technisch könnte eine feine Kombination sein, konzeptionell sind sie nicht.

Aber keine Angst, überprüfen Sie einfach die Mobx-Utils or Compressed-Async-Mobx-Pakete. Sie enthalten möglicherweise die gebrauchsfertigen Abstraktionen, nach denen Sie suchen.

+0

ich denke, dass [lazyObservable] (https://github.com/mobxjs/mobx-utils#lazyobservable) am besten passt. Aber wenn es das andere Observable ändert, löst es ein Update für andere Komponenten aus? – Chris

Verwandte Themen