Facebook Flex和Actions的反馈

时间:2015-01-18 11:45:23

标签: javascript reactjs-flux

我正在玩Facebook Flux(我正在使用Fluxxor,但我认为这并不重要)使用ReactJS,到目前为止我认为它们是处理应用程序中数据流的好方法。然而,有一件事我真的很难理解。可能这只是一些不应该用Flex完成的事情,或者我错过了一些明显的东西,但因此我要问的是......

例如,我正在建立一个登录系统。非常简单 - 弹出一个登录对话框,输入用户名和密码,然后按按钮。这将调用LoginAction.login(用户名,密码)Action Creator,它将LOGIN事件发送到Dispatcher,然后触发API调用以对用户进行身份验证并确保凭据正确无误。如果我们从API获得成功,那么我们将触发LOGIN_SUCCESS事件到Dispatcher,SessionStore处理它并存储我们已成功登录的事实,以及我们是谁的详细信息。然后,这会触发UI的位更新 - 例如,“登录”按钮变为“Hello Graham”位文本,而“Log Out”按钮则变为“Log Out”按钮。这一切都非常简单,只是有效且有意义。

我遇到的是登录失败的时候。如果我输入了无效的用户名/密码,那么我希望登录对话框告诉用户这个,以便他们可以更正他们输入的内容并重试。我能想到实现此目的的唯一方法是将一个LOGIN_FAILED事件发送到Dispatcher,然后由一些Store处理,该Store存储要显示的Dialog的最后一个Login错误。这只是感觉很奇怪,因为这些错误不是应用程序状态,而是关于这一个失败的请求的传递信息,然后用户将更正并重试。

我觉得这种传递状态在API调用中非常普遍,因为用户输入可能会失败,因此不属于应用程序状态的一部分,而是属于其他地方。但是,我无法弄清楚Flux如何允许这种传递状态返回UI以显示给用户......

1 个答案:

答案 0 :(得分:0)

  

SessionStore处理此事并存储我们已成功登录的事实

在您的情况下,您会保留有关成功验证的信息。为什么不在商店(同一商店或保持身份验证状态或权限状态的独立商店)保留一次不成功的信息?

这是你所在州的另一面。在这种情况下,您只需要在发生故障时(例如关于成功登录的情况)将特殊事件发送到存储,保存新状态并将更改发送到UI。

这是the example,这与我的意思相似。您向服务器发送请求,如果登录失败,则可以发送操作。