React JS + Fetch API发布

时间:2018-07-02 22:25:11

标签: javascript reactjs

我使用fetch API从有效的表单中发布一些数据。

但是,我遇到的问题是,当我发布数据时状态不会更新,是的,我知道我没有使用setState(),但没有设置任何内容。

目前,我正在尝试通过控制台日志记录调试问题,结果发现该主体未被使用。

提交功能:

addContact = (event) => {

      event.preventDefault(); //Prevents The Default Action Of A Form


      const formData = {};

      /* 
      for(let [temp variable] in this.state.contacts) {
        formData[attach temp variable] = to contacts[temp variable].value
      }

      */

      // BASIC TERM: For everything in the contacts config set the formData (Blank Object) equal to the identifier e.g. name, street equal to the state value. The object will then be populated
      // The formData is then attached to an object named object and sent to the firebase database by attaching it to the post request
      for(let formElementIdentifier in this.state.contacts) {
        formData[formElementIdentifier] = this.state.contacts[formElementIdentifier].value;
      }

      const data = {
        persons: formData
      }

      fetch("https://address-book-database.firebaseio.com/contact.json", {
        method: "POST",
        headers : {
          Accept: "application/json",
          "Content-Type": "application/json"
        },
        body: JSON.stringify(data)
      })
      .then((res) => {
        console.log("Body Used Or Not")
        console.log(res.bodyUsed)
      })
      .then(json => {

      })
    }

这是第一次使用访存API。 Tm真的很困惑为什么这行不通,将不胜感激。我知道链接.then(),但是我无法使其与POST requet一起使用。

我要做的就是从表单中设置值并将其附加到请求,将请求转换为JSON,然后更新状态。

完整项目:https://github.com/AlexMachin1997/React-JS-Contact-Book/blob/master/src/Components/Contact/Contacts/Contacts.js

1 个答案:

答案 0 :(得分:2)

使用您的提取请求,如下所示。您需要使用response.json()。它等待身体加载。

为什么response.json返回承诺?

因为所有标头都到达时您会收到响应。调用.json()可以为尚未加载的http响应的正文提供一个保证

Why is the response object from JavaScript fetch API a promise?

fetch('https://address-book-database.firebaseio.com/contact.json', {
    method: 'post',
    headers: {
        Accept: "application/json",
        "Content-Type": "application/json",
        'Access-Control-Allow-Origin': '*'
    },
    body: JSON.stringify(data)
}).then(function (response) {
    return response.json(); //response.json() is resolving its promise. It waits for the body to load
}).then(function (responseData) {
    //Do your logic
});