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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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使用相同的ID保存和更新相同的用户信息_Reactjs_Forms_Authentication_User Input - Fatal编程技术网

Reactjs使用相同的ID保存和更新相同的用户信息

Reactjs使用相同的ID保存和更新相同的用户信息,reactjs,forms,authentication,user-input,Reactjs,Forms,Authentication,User Input,这是我的 我创建了一个用于保存和编辑信息的按钮 我想,一旦信息是第一次保存,应用程序将注册用户ID,以更新信息,而不是在数据库中创建新行 在沙箱中,您可以找到我编写的代码,但它不起作用。在沙箱中,它不起作用,因为显然没有后端,但这不是我所指的错误。我认为问题出在“服务”文件夹和这段代码中: if (info.id === null) { InfoDataService.create(data) .then((response) => { co

这是我的

我创建了一个用于保存和编辑信息的按钮

我想,一旦信息是第一次保存,应用程序将注册用户ID,以更新信息,而不是在数据库中创建新行

在沙箱中,您可以找到我编写的代码,但它不起作用。在沙箱中,它不起作用,因为显然没有后端,但这不是我所指的错误。我认为问题出在“服务”文件夹和这段代码中:

if (info.id === null) {
      InfoDataService.create(data)
        .then((response) => {
          console.log('create', response.data);
          setInfo({
            id: response.data.id,
            email: response.data.email,
            firstname: response.data.firstname,
            lastname: response.data.lastname
          });
        })
        .catch((e) => {
          console.error(e);
        });
    } else {
      InfoDataService.update(info.id, data)
        .then((response) => {
          console.log(response);
          setInfo({
            id: response.data.id,
            email: response.data.email,
            firstname: response.data.firstname,
            lastname: response.data.lastname
          });
          console.log(response.data);
        })
        .catch((e) => {
          console.error(e);
        });
    }
  };

像这样的方法应该会奏效:

我已经在infoService.js中模拟了您的API,这样它至少可以做些什么,但您应该能够删除这些行,它将在本地为您工作


希望这能为你指明正确的方向

它就像我想要的那样工作。唯一的问题是,我的应用程序不会每次更新并创建一个新ID。在您的代码沙盒中,您设置了id:123,我已经删除了该部分代码。我希望每个用户的ID都是唯一的,然后在此基础上执行更新。@FrancescoEsposto应该发生的事情是您的InfoService.create应该返回一个ID,该ID将被设置为info。也许您的后端代码没有正确返回id?用户信息后的括号中显示了什么?首先应该(未保存),然后更改为一个id—如果没有这样做,您的post/api/users端点可能不会按预期返回id。在InfoService.create中,可能是console.log返回的数据,您可能会看到id丢失,或者可能名称不同,或者在我第一次单击“保存”时出现错误的情况(即id不是id),对象创建成功。我点击“编辑”,修改信息,点击“保存”,它被正确更新。第三次他告诉我错误:“请求失败,状态代码为500”XHR PUT localhost:8080/api/users/undefined。答复。JSON:Error updating User with id=undefined“当我第三次更新时,我已经有了这个错误:但我认为这与此无关。所以第二次和第三次之间出现了一些问题。看看发生了什么,你的第二次保存将调用
InfoDataService.update
(UserInfo.js:71)它将调用
update
端点(user.controller.js:50)。问题是您的
InfoDataService.update
调用需要一个响应,它会尝试在第74行使用setInfo更新该响应。但是您的更新端点是一个PUT请求,因此不会(也不应该)响应实际上,返回任何东西。我想如果你在第73行的console.log上搜索,你会发现它是空的。所以解决方法是删除第74行的setInfo。