2017-08-02 2 views
0

Est-il acceptable de renvoyer des promesses des actions ou est-ce contraire au modèle de magasin?Renvoyer des promesses d'actions MobX

La définition d'une propriété observable après chaque opération d'extraction réussie à mettre à jour vers l'interface utilisateur semble beaucoup de travail inutile.

Alors est-ce ok:

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

     return reject('user_not_found') 
    }) 
} 

Répondre

0

Si vous fonctionnez n'a pas d'impact sur l'état du magasin, il n'y a pas besoin de faire une action. Vous n'avez donc pas besoin de vous inquiéter du retour d'une promesse.

De la documentation:

Toute demande a des actions. Les actions sont tout ce qui modifie l'état. Avec MobX vous pouvez le rendre explicite dans votre code où vos actions vivent en les marquant. Les actions vous aident à mieux structurer votre code.

Ici, votre action ne modifie pas l'état. Donc, vous pouvez simplement supprimer le décorateur @action.

Cela étant dit; il est vrai qu'au début, il est plutôt facile de simplement mettre à jour l'interface utilisateur et de ne pas conserver le résultat des requêtes asynchrones dans le magasin. Cependant, à long terme, vous découvrirez que vous voulez gérer une variable isLoading pour montrer à l'utilisateur que quelque chose se passe en arrière-plan, alors vous aurez envie de montrer des erreurs dans un snack ... et votre simple fetch aura beaucoup d'impact de l'interface utilisateur. C'est là que l'utilisation d'un magasin Mobx vous aidera à gérer l'état hors du composant. Donc, votre action est probablement une action et vous voudrez peut-être juste mettre à jour l'état de votre magasin à partir de ce qu'il fait au lieu de renvoyer une promesse que vous aurez à faire quand même.

+0

Oui, l'action modifie l'état du magasin. En fait, je pensais à une approche mixte. Au lieu de tenir une variable pour signaler le nom de l'action terminée (comme 'players_downloaded', 'signup_completed', etc), le simple renvoi d'une promesse de l'action elle-même me semble plus gérable. Ce que je me demande, c'est si c'est contre la tendance et quelles incohérences je pourrais avoir à long terme. –

+0

Ensuite, je ne pense pas que ce soit contre le modèle. Il pourrait être très opiniâtre cependant. –