我使用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,然后更新状态。
答案 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
});