Gmail风格的最爱/星形功能的粗糙体系结构是什么?



我应该开始说我们目前正在使用的堆栈。但是,我们对其他建议持开放态度,因为这个问题(主要是响应时间问题)在我们的应用程序中非常普遍。

后端:AWS ELB EC2实例带有nodejs,restify,其他各种库,连接到dynamodb。

前端:与redux反应。

我正在尝试构建一项功能,该功能可以在我们的基于React的前端进行某些数据。实际上,这与"主演"或"偏爱"的帖子或电子邮件非常相似,例如在Gmail或&&&&&< ---在那儿,带有Stackoverflow。

对我来说,这似乎是一个非常简单的问题。但是,当我进一步研究它时,它变得更加复杂。

主要问题来自一个事实:如果我单击"星"图标,它应该生成请求并更改其图像。但是,在大多数情况下,我会等待响应,然后再更改前端的相应值,以防止冲突。问题是,我们的要求时间太长了。gmail,因此立即显示出出演和未星级之间的过渡,我觉得如果这是任何东西,我会不满意。

如果我只是允许它在前端自由更改而无视其生成的请求中的响应,那么我会很快遇到种族和冲突问题。尤其是在考虑我们希望能够在表200 记录上"选择全部"和Star(存档)时。

那么答案是什么?老实说,我完全不知所措。

我认为这里可能有用的概念是"乐观的UI"。这是一种通常用于您所描述的模式,以使用户保持紧密的反馈循环,向他们表明,他们的动作已经做了某件事,假设某事(例如HTTP请求)会出现积极的结果,并且如果在那里,则是错误,您可以恢复正状态并提醒用户问题。

在React中实践中,如果您使用的是Redux之类的东西,则可以创建某种"存档"动作,以将每个选定项目的状态设置为还原器中的"存档",同时删除向后端的请求使用存档状态更新服务器。假设您使用async/await来创建服务器请求,则可以将其包装在try/catch中,其中catch检测到失败的请求并恢复还原器中所选项目的"存档"状态,并可能向用户显示错误消息。/p>

如评论中所述,我认为最好的方法是"希望最好"。

用户按下星按钮时,他们期望没有问题,因此除了照亮恒星以外,要对用户感到震惊。当然,您需要在后端验证恒星,但是与此同时,您将假设它会成功并点亮恒星。

当请求完成后,假设所有内容都有效,并且星星有效,用户没有注意到任何内容,并且互动效果就奏效了他们的期望。

如果请求完成并且由于某种原因而导致星星无效,则您必须显示某种类型的错误消息并将其星级统计。

最新更新