2016-12-26 68 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)); 
} 

左右,主要目标是,当配置文件数据尚未经过验证,我们会从服务器重新获取它,然后,而等待数据发生变化,我们将为他们提供localstorage中的缓存值。

Anddd ....我的问题是,为什么它给我一个'计算值不能调用动作功能'的东西?

谢谢! :D

回答

1

计算的目的是(概念上)是纯粹的。和行动的目的是(概念上)不纯。所以虽然从技术上来说可能是是一个很好的组合,但从概念上讲它们不是。

但不要害怕,只需检查mobx-utils or computed-async-mobx包。它们可能包含您正在寻找的准备使用的抽象。

+0

我认为[lazyObservable](https://github.com/mobxjs/mobx-utils#lazyobservable)最合适。但是当它改变另一个可观察的时候,它会触发其他组件的更新吗? – Chris