2017-08-02 88 views
0

可以從操作返回承諾還是違反商店模式?從MobX操作返回承諾

在每次成功獲取操作以更新到UI之後設置observable屬性似乎是很多不必要的工作。

所以這是正確的:

@action signup(username: string, password: string) { 
    return new Promise(async (resolve, reject) => { 
     if (success) { 
      return resolve(username) 
     } 

     return reject('user_not_found') 
    }) 
} 

回答

0

如果功能對商店的狀態沒有影響,也沒有必要讓它的動作。所以你不必擔心返回一個Promise。

從文檔:

任何應用程序的行爲。動作是修改狀態的任何東西。使用MobX,您可以在您的代碼中明確標出它們,從而明確您的行爲。操作可以幫助您更好地構建代碼。

在這裏,您的操作不會修改狀態。所以你可以刪除@action修飾器。

這就是說;確實,在開始時,更新UI並不保留商店中的異步查詢結果是相當容易的。然而,從長遠來看,你會發現你想管理一個isLoading變量來向用戶顯示正在進行的事情,然後你會想要在快餐欄中顯示錯誤...並且你的簡單獲取將會有UI的許多影響。這是使用mobx商店的地方,可幫助您管理組件外的狀態。

因此,您的行爲可能確實是一種行爲,您可能只想更新商店的狀態,而不是返回您必須處理的承諾。

+0

是的動作修改了商店的狀態。其實我想的是一種混合的方法。而不是持有一個變量來表示已完成動作的名稱(如'players_downloaded','signup_completed'等),只需從動作本身返回一個Promise對我來說似乎更易於管理。我想知道的是,它是否違背了這一模式,以及我長期可能面臨的矛盾。 –

+0

然後我認爲這不符合這種模式。儘管如此,它可能會很有見地。 –