2017-08-02 12 views
0

アクションから約束を返すことはOKですか、それとも店のパターンとは違うのですか?MobXのアクションから約束を返す

フェッチ操作が成功するたびに観察可能なプロパティを設定してUIに更新することは、多くの不必要な作業のようです。

だから、これokがある:

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

     return reject('user_not_found') 
    }) 
} 

答えて

0

あなたの関数は、ストアの状態に影響を与えない場合は、そのアクションにする必要はありません。だから、約束を返すことを心配する必要はありません。ドキュメントから

任意のアプリケーションがアクションを持っています。アクションとは、状態を変更するものです。 MobXを使用すると、アクションをマークすることでコードが明示的に表示されます。アクションはコードの構造を改善するのに役立ちます。

ここでは、アクションは状態を変更しません。したがって、@actionデコレータを削除するだけで済みます。

そう言われています。最初はUIを更新してストア内の非同期クエリの結果を維持するのは簡単ではないことは事実です。しかし、長期的には、isLoading変数を管理して、何かがバックグラウンドで行われていることをユーザーに示すことができます。次に、スナックバーにエラーを表示したいのですが、簡単なフェッチではUIの多くの影響。これは、mobxストアを使用して、コンポーネントの状態を管理するのに役立ちます。

あなたの行動はおそらく実際の行動であり、どうにか対処しなければならない約束を返すのではなく、店舗の状態を更新したいと思うかもしれません。

+0

はいアクションは、ストアの状態を変更します。実際、私は混在したアプローチを考えていました。完了したアクション( 'players_downloaded'、 'signup_completed'など)の名前を知らせるための変数を保持する代わりに、アクション自体からPromiseを返すだけで、より管理しやすくなります。私が疑問に思っているのは、それがパターンに反しているのか、長期的に私が直面している不一致なのかです。 –

+0

それで、私はそれがパターンに反するとは思わない。しかし、それは非常に賛成かもしれません。 –