Reactjs 反应-即使没有变化,也使用效果
我正试图将一个对象保存到数据库中 流程如下所示:Reactjs 反应-即使没有变化,也使用效果,reactjs,Reactjs,我正试图将一个对象保存到数据库中 流程如下所示: 从DB获取更新的数据(使用API),并将其呈现给用户,并将其保存在useStatevar中 用户更改数据并按“保存” 再次从数据库中获取更新的数据,以防其他用户进行更改 使用新更改更新最后获取的数据,并发送以进行更新(使用API) 目前,我有两个原因: 数据被提取到一个状态,所以我需要“等待”,直到新数据被异步设置到该状态。 我读到唯一的选择是使用useffect,尽管它不是最干净的解决方案。 (因此,useffect将包含所有更新逻辑,如果数据
useState
var中useffect
,尽管它不是最干净的解决方案。
(因此,useffect
将包含所有更新逻辑,如果数据在未保存的情况下发生更改,这是危险的。我可以使用save标志,但仍然不是最佳方法。)useEffect(() => {
if (isSave) {
save()
setSave(false)
}
}, [dataFetched])
useffect
,如果“旧”数据与新数据相同,则不会触发useffect
,也不会保存数据我能做什么?如何获取数据?各种方法对此有非常不同的解决方案(普通的redux、带有中间件的redux,您可以在其中等待分派(…)、
fetch()
API、useSWR()
,等等)。然而,我个人不会在客户端这样做。无论您尝试什么,都可能始终存在冲突,在尝试更新数据时,此场景应在服务器端处理,客户端应仅处理409响应(无论如何,您应该这样做,因为服务器将始终需要这样做)。您可以为save设置初始值let[save,setSave]=React.useState(initialValue)
@AdrianoRepetti 1。我正在使用API。更新了问题。2.我们的服务器获取整个对象并按原样保存(验证后)。他如何确定差异来自用户还是冲突?@bubulledu93这对我有什么帮助?我担心在不按save的情况下会触发useEffect。这不是我能控制的,因为它取决于与状态相关的东西。是的,您使用的是一个API,但您如何调用它(以及如何返回其结果)才是区别所在。2.服务器必须执行此验证,您不能将其留给客户端(可以绕过/篡改)。想象一下,如果在您成功预订座位后,我可以用我自己的数据覆盖您的飞机预订(因为服务器不检查,而且它信任客户端)。在实践中:服务器端和web客户端是否只需要正确处理409 HTTP状态代码(通知用户?尝试执行协调?)如何获取数据?各种方法对此有非常不同的解决方案(普通的redux、带有中间件的redux,您可以在其中等待分派(…)、fetch()
API、useSWR()
,等等)。然而,我个人不会在客户端这样做。无论您尝试什么,都可能始终存在冲突,在尝试更新数据时,此场景应在服务器端处理,客户端应仅处理409响应(无论如何,您应该这样做,因为服务器将始终需要这样做)。您可以为save设置初始值let[save,setSave]=React.useState(initialValue)
@AdrianoRepetti 1。我正在使用API。更新了问题。2.我们的服务器获取整个对象并按原样保存(验证后)。他如何确定差异来自用户还是冲突?@bubulledu93这对我有什么帮助?我担心在不按save的情况下会触发useEffect。这不是我能控制的,因为它取决于与状态相关的东西。是的,您使用的是一个API,但您如何调用它(以及如何返回其结果)才是区别所在。2.服务器必须执行此验证,您不能将其留给客户端(可以绕过/篡改)。想象一下,如果在您成功预订座位后,我可以用我自己的数据覆盖您的飞机预订(因为服务器不检查,而且它信任客户端)。实际上:这个服务器端和web客户端是否只需要正确处理409 HTTP状态代码(通知用户?尝试执行协调?)