如果我使用React/Vue/Angular或者只是用纯JS阻止我的页面在提交时加载,那么我应该在前端生成元素的id还是等待服务器响应后再生成id?以一个简单的todo列表为例,我添加一个todo,它必须有一个id,这样当我想要删除它时,我可以将id发送给服务器。过去,我通常会生成UUID并将其发送到服务器供其使用。我的问题只是这是否是良好的实践,或者我应该采取不同的方法?
如果您要将数据存储在服务器中,不应该在客户端创建元素的ID。您可能会添加相同的ID两次,或者另一个用户可能使用与您相同的ID,或者使用无效的ID,等等。您几乎可以肯定地避免重复的ID生成UUIDs客户端,但更容易、更安全的方法是在服务器上进行编辑。请注意,在客户端中,您无法控制客户端发送到后端的内容。无论您在JavaScript中做什么,恶意用户都可以始终黑客请求发送到服务器并以他们想要的方式修改它,因此您可能会得到太长的ID,超出了数据库字段的限制,或者有无效的值,神知道还有什么其他问题。
生成客户端ID确实是不好的做法,原因已经解释过了。但是我认为关于您担心的真正问题是,即使您在客户端生成了ID,您仍然需要等待服务器响应以确保资源实际上已创建。服务器可能暂时宕机,服务器-数据库连接可能中断,磁盘可能出现故障。在出现错误时,无论哪种情况都需要该响应才能获得更好的用户体验。因此,我不认为通过在客户端生成ID来改善整体用户体验。
key
的唯一标识)而需要,你仍然可以在客户端使用UUID,但它并不能替代数据库ID,只是因为使用UUID可能不方便而已。我应该提交表单并等待响应,然后再添加元素吗? - 不一定,出于可用性的考虑,你可以立即将其添加到DOM中,然后使用响应中收到的id
更新元素,或者如果出现错误,则删除元素。 - Estus Flask