Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 从MobX actions返回承诺_Reactjs_React Native_Mobx - Fatal编程技术网

Reactjs 从MobX actions返回承诺

Reactjs 从MobX actions返回承诺,reactjs,react-native,mobx,Reactjs,React Native,Mobx,从行动中回报承诺可以吗?还是违背了商店模式 在每次成功的抓取操作之后设置一个可观察属性来更新UI,这似乎是很多不必要的工作 这样可以吗: @action signup(username: string, password: string) { return new Promise(async (resolve, reject) => { if (success) { return resolve(username) }

从行动中回报承诺可以吗?还是违背了商店模式

在每次成功的抓取操作之后设置一个可观察属性来更新UI,这似乎是很多不必要的工作

这样可以吗:

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

        return reject('user_not_found')
    })
}

如果函数对存储的状态没有影响,则无需将其作为操作。所以你不必担心回复承诺

从文件中:

任何应用程序都有操作。动作是修改状态的任何东西。使用MobX,您可以通过标记动作,使其在代码中显式显示。操作可以帮助您更好地构造代码

在这里,您的操作不会修改状态。因此,您可以删除
@action
装饰器

话虽如此,;的确,一开始只更新UI而不在存储中维护异步查询的结果相当容易。但是,从长远来看,您会发现您希望管理一个
isLoading
变量,向用户显示后台正在执行某些操作,然后您将希望在snackbar中显示错误。。。您的简单获取将对UI产生很大影响。在这里,使用mobx存储将帮助您管理组件的状态


因此,您的操作可能确实是一个操作,您可能只想根据它所做的事情更新存储的状态,而不是返回您无论如何都必须处理的承诺

是,该操作修改存储的状态。实际上,我在考虑一种混合的方法。对于我来说,仅仅从操作本身返回一个承诺似乎更容易管理,而不是持有一个变量来表示已完成操作的名称(如“players\u download”、“signup\u completed”等)。我想知道的是,这是否与模式背道而驰,从长远来看,我可能会面临什么样的矛盾。那么我不认为这与模式背道而驰。但这可能是非常固执己见的。