Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应-即使没有变化,也使用效果_Reactjs - Fatal编程技术网

Reactjs 反应-即使没有变化,也使用效果

Reactjs 反应-即使没有变化,也使用效果,reactjs,Reactjs,我正试图将一个对象保存到数据库中 流程如下所示: 从DB获取更新的数据(使用API),并将其呈现给用户,并将其保存在useStatevar中 用户更改数据并按“保存” 再次从数据库中获取更新的数据,以防其他用户进行更改 使用新更改更新最后获取的数据,并发送以进行更新(使用API) 目前,我有两个原因: 数据被提取到一个状态,所以我需要“等待”,直到新数据被异步设置到该状态。 我读到唯一的选择是使用useffect,尽管它不是最干净的解决方案。 (因此,useffect将包含所有更新逻辑,如果数据

我正试图将一个对象保存到数据库中

流程如下所示:

  • 从DB获取更新的数据(使用API),并将其呈现给用户,并将其保存在
    useState
    var中
  • 用户更改数据并按“保存”
  • 再次从数据库中获取更新的数据,以防其他用户进行更改
  • 使用新更改更新最后获取的数据,并发送以进行更新(使用API)
  • 目前,我有两个原因:

  • 数据被提取到一个状态,所以我需要“等待”,直到新数据被异步设置到该状态。 我读到唯一的选择是使用
    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状态代码(通知用户?尝试执行协调?)