从 MobX 操作返回承诺
Returning promises from MobX actions
return 从行动中承诺是否可以,还是违反商店模式?
在每次成功的获取操作更新到 UI 之后设置一个可观察的 属性 似乎有很多不必要的工作。
这样可以吗:
@action signup(username: string, password: string) {
return new Promise(async (resolve, reject) => {
if (success) {
return resolve(username)
}
return reject('user_not_found')
})
}
如果你的函数对商店的状态没有影响,就没有必要让它成为一个动作。所以你不需要担心返回一个 Promise。
来自文档:
Any application has actions. Actions are anything that modify the state. With MobX you can make it explicit in your code where your actions live by marking them. Actions help you to structure your code better.
在这里,您的操作不会修改状态。所以你可以删除 @action
装饰器。
话虽这么说;的确,一开始只更新 UI 而不在商店中维护异步查询的结果是相当容易的。但是从长远来看,您会发现您想要管理一个 isLoading
变量来向用户显示后台正在执行某些操作,然后您将希望在快餐栏中显示错误……以及您的简单的获取将对 UI 产生很大的影响。这是使用 mobx 存储将帮助您管理组件外状态的地方。
因此,您的操作可能确实是一个操作,您可能只想更新商店的状态,而不是返回您无论如何都必须处理的承诺。
return 从行动中承诺是否可以,还是违反商店模式?
在每次成功的获取操作更新到 UI 之后设置一个可观察的 属性 似乎有很多不必要的工作。
这样可以吗:
@action signup(username: string, password: string) {
return new Promise(async (resolve, reject) => {
if (success) {
return resolve(username)
}
return reject('user_not_found')
})
}
如果你的函数对商店的状态没有影响,就没有必要让它成为一个动作。所以你不需要担心返回一个 Promise。
来自文档:
Any application has actions. Actions are anything that modify the state. With MobX you can make it explicit in your code where your actions live by marking them. Actions help you to structure your code better.
在这里,您的操作不会修改状态。所以你可以删除 @action
装饰器。
话虽这么说;的确,一开始只更新 UI 而不在商店中维护异步查询的结果是相当容易的。但是从长远来看,您会发现您想要管理一个 isLoading
变量来向用户显示后台正在执行某些操作,然后您将希望在快餐栏中显示错误……以及您的简单的获取将对 UI 产生很大的影响。这是使用 mobx 存储将帮助您管理组件外状态的地方。
因此,您的操作可能确实是一个操作,您可能只想更新商店的状态,而不是返回您无论如何都必须处理的承诺。